完成MSP430的IAP升级程序(总结)
這幾天測(cè)試寫好的IAP升級(jí)程序,真是一個(gè)糟,能將程序下載進(jìn)去,但無法運(yùn)行。
經(jīng)過各種測(cè)試,修改終于找到了問題的原因,現(xiàn)在大致總結(jié)下我在寫IAP程序的時(shí)候
遇到的問題和解決方案。首先要實(shí)現(xiàn)單片機(jī)的IAP升級(jí)程序,我們要知道自己的IDE如何能
將程序的函數(shù)或者變量的編譯地址固定,因?yàn)閷?duì)于bootload程序,我們要固定它的地址,
還有從bootload跳轉(zhuǎn)到的程序運(yùn)行的地址。
對(duì)于MSP430,在測(cè)試中我程序復(fù)位時(shí)跳轉(zhuǎn)到rts430x.lib:boot.obj (.text:_isr:
_c_int00_noexit)這樣一個(gè)啟動(dòng)函數(shù),之后執(zhí)行_syatem_pre_int->_auto_init->main,
在_auto_init過程中,程序會(huì)執(zhí)行memcpy函數(shù)(將.cinit段賦值到RAM里),就是初始化RAM
中的全局變量了。我的程序主要錯(cuò)在這個(gè)過程里,導(dǎo)致更新后問題不斷,還有對(duì)于.cinit段和
.const段,我們也要固定地址,因?yàn)閙emcpy函數(shù)初始化ram的地址被固定了,且bootload
是不能更新的,所以固定.cinit段后,我們memcopy操作地址就固定,不然當(dāng)程序變化重新編譯
后可能就會(huì)事.cinit段的地址發(fā)生變化,導(dǎo)致ram初始化錯(cuò)誤。
這樣修改后,程序大致就能自升級(jí)了,程序只升級(jí)運(yùn)行部分的程序,對(duì)bootload程序不升級(jí)。
轉(zhuǎn)載于:https://www.cnblogs.com/nixianmin/archive/2012/08/17/2643743.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的完成MSP430的IAP升级程序(总结)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS7.1.2越狱插件推荐:xNoti
- 下一篇: CJCMS系列---慢慢讲电子商务在项目