msp430程序跑飛之解決方法
msp430程序跑飛之解決方法
1.中斷或主函數(shù)中有死循環(huán),現(xiàn)象是程序停在某處。
2.堆棧溢出。現(xiàn)象是程序跑飛。
解決辦法:
A.看中斷有沒有用 _EINT(),引起中斷嵌套.
B.Project--Options--General Options---Stack/Heap 將Stack size設(shè)置大一些。
3.中斷耗時(shí)太長(zhǎng),剛出中斷又進(jìn)去了.這時(shí)的現(xiàn)象是程序一直在中斷中執(zhí)行,回不到主函數(shù)。
4.檢查CPU的電源是不是穩(wěn)定,msp430在要保證程序正常運(yùn)行,需保證Vcc大于1.8V。當(dāng)電壓低至0.8V時(shí),程序仍有可能執(zhí)行。這時(shí)的現(xiàn)象是PC指針亂飛,有復(fù)位,死機(jī),停在中斷,時(shí)鐘頻率發(fā)生變化等現(xiàn)象。
5.程序編譯沒問題,下載程序后上電不斷復(fù)位,該問題是由于WDT造成的(RAM的初始化時(shí)間大于WDT默認(rèn)的32MS時(shí)間,因此MSP復(fù)位)根本原因是初始化的時(shí)間過長(zhǎng),超過了看門狗的時(shí)間,初始化完成以后才能進(jìn)入main函數(shù),這時(shí)關(guān)狗已經(jīng)來不及了。
解決的辦法:
A 對(duì)你的數(shù)組用 __no init_定義,上電編譯器不產(chǎn)生特殊的附加函數(shù)去初始化RAM.
B 在Project--Options--Linker--Config中選擇 Override default programe,并將Entry lib 設(shè)置成 __program_start這時(shí)要修改Cstartup.S43(記得把它加入復(fù)制到工程而不是修改系統(tǒng)的),在第一條指令前加入關(guān)狗的指令,在main函數(shù)里再開(如果需要的話)。
如果用匯編,則沒有這個(gè)問題