日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀] MSP430升級程序的幾點注意事項1、這幾天測試寫好的IAP升級程序,真是一個糟,能將程序下載進去,但無法運行。經(jīng)過各種測試,修改終于找到了問題的原因,現(xiàn)在大致總結(jié)下我在寫IAP程序的時候遇到的問題和

MSP430升級程序的幾點注意事項

1、這幾天測試寫好的IAP升級程序,真是一個糟,能將程序下載進去,但無法運行。


經(jīng)過各種測試,修改終于找到了問題的原因,現(xiàn)在大致總結(jié)下我在寫IAP程序的時候

遇到的問題和解決方案。首先要實現(xiàn)單片機的IAP升級程序,我們要知道自己的IDE如何能

將程序的函數(shù)或者變量的編譯地址固定,因為對于bootload程序,我們要固定它的地址,

還有從bootload跳轉(zhuǎn)到的程序運行的地址。

  對于MSP430,在測試中我程序復位時跳轉(zhuǎn)到rts430x.lib:boot.obj (.text:_isr:

_c_int00_noexit)這樣一個啟動函數(shù),之后執(zhí)行_syatem_pre_int->_auto_init->main,

在_auto_init過程中,程序會執(zhí)行memcpy函數(shù)(將.cinit段賦值到RAM里),就是初始化RAM中的全局變量了。我的程序主要錯在這個過程里,導致更新后問題不斷,還有對于.cinit段和.const段,我們也要固定地址,因為memcpy函數(shù)初始化ram的地址被固定了,且bootload是不能更新的,所以固定.cinit段后,我們memcopy操作地址就固定,不然當程序變化重新編譯后可能就會事.cinit段的地址發(fā)生變化,導致ram初始化錯誤。


這樣修改后,程序大致就能自升級了,程序只升級運行部分的程序,對bootload程序不升級。


2、_c_int00 是c語言程序的入口.首先上電后,系統(tǒng)執(zhí)行reset矢量代碼,該代碼是我們寫的話,我們就令cpu轉(zhuǎn)到c_int00,這段程序為c語言運行作準備,準備工作做好后,就轉(zhuǎn)到c語言的main()。

如果reset矢量代碼不是我們寫的,是ti寫的,那么就執(zhí)行bootloader程序,該程序先將從某個外部得到的真正程序放在規(guī)定的地方,然后轉(zhuǎn)過去執(zhí)行該代碼。

那么如何決定reset矢量代碼是ti寫的還是我們寫的,那就看復位后mp/mc腳的電平。
要是調(diào)試的時候我們的mp/mc腳選擇了我們不希望的方式,怎么辦?(在調(diào)試的時候一般不管bootloader的,只有項目最后成功了才管),用jtag來控制。

C程序開始運行時,必須首先初始化C運行環(huán)境,這是通過c_int0函數(shù)完成的,這個函數(shù)在運行支持庫(rts,runtime-support library)中。連接器會將這個函數(shù)的入口地址放置在復位中斷向量處,使其可以在初始化時被調(diào)用。c_int0函數(shù)進行以下工作以建立C運行環(huán)境:為系統(tǒng)堆棧產(chǎn)生.stack塊,并初始化堆棧指針。從.cinit塊將初始化數(shù)據(jù)拷貝到.bss塊中相應的變量。調(diào)用main函數(shù),開始運行C程序。用戶可以對c_int0函數(shù)進行修改,但修改后的函數(shù)必須完成以上任務。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉