MSP430重啟/頻繁重啟/跑飛 原因分析
案例1:
concern_tower_num為從鐵電內(nèi)讀取的數(shù)據(jù),因?yàn)殍F電沒(méi)有初始化,所以concern_tower_num的值很大
下面的程序一直循環(huán)到鐵電內(nèi)concern_tower_num所在位置的值,所以超過(guò)了option內(nèi)所設(shè)置的stack的最大容量導(dǎo)致堆棧溢出,重啟。
定義了一個(gè)29字節(jié)長(zhǎng)度的數(shù)組: char back_info[29]={0};
結(jié)果給其填充50個(gè)字節(jié)的內(nèi)容 memcpy( back_info+19,send_back_data,data_len); ,現(xiàn)象是堆棧沒(méi)有溢出,機(jī)器重啟。
問(wèn)
MSP430F147程序總是莫名其妙的重新啟動(dòng)?
已經(jīng)檢查了堆棧沒(méi)有溢出,WDT依然還是HOLD狀態(tài)
哪位高手指點(diǎn)一下,還有哪種可能性?
已經(jīng)檢查了堆棧沒(méi)有溢出,WDT依然還是HOLD狀態(tài)
哪位高手指點(diǎn)一下,還有哪種可能性?
答 1:
先看IFG1.0位狀態(tài),看是什么原因?qū)е聫?fù)位
答 2:
您測(cè)量一下復(fù)位腳上的波形,看是否是硬件復(fù)位。
答 3:
你的工作環(huán)境??是不是干擾問(wèn)題?
是不是指針弄飛了??
是不是指針弄飛了??
答 4:
外部有看門狗嗎?有的話要先關(guān)掉。
答 5:
謝謝以上各位的回答:
我的具體情況是原來(lái)程序是用查詢方式,已經(jīng)通過(guò)測(cè)試,沒(méi)有這個(gè)問(wèn)題
而現(xiàn)在需要添加部分功能,為此把查詢方式改為了中斷方式(新功能還未添加),
現(xiàn)在已經(jīng)檢查過(guò)IFG1.0位0,不是內(nèi)部看門狗導(dǎo)致復(fù)位
外部無(wú)看門狗,也無(wú)明顯干擾源
硬件復(fù)位可能性也不大,不過(guò)這個(gè)可以再測(cè)一下!
有可能是指針弄飛等程序錯(cuò)誤,但是這種內(nèi)部程序錯(cuò)誤會(huì)導(dǎo)致系統(tǒng)復(fù)位嗎?
我的具體情況是原來(lái)程序是用查詢方式,已經(jīng)通過(guò)測(cè)試,沒(méi)有這個(gè)問(wèn)題
而現(xiàn)在需要添加部分功能,為此把查詢方式改為了中斷方式(新功能還未添加),
現(xiàn)在已經(jīng)檢查過(guò)IFG1.0位0,不是內(nèi)部看門狗導(dǎo)致復(fù)位
外部無(wú)看門狗,也無(wú)明顯干擾源
硬件復(fù)位可能性也不大,不過(guò)這個(gè)可以再測(cè)一下!
有可能是指針弄飛等程序錯(cuò)誤,但是這種內(nèi)部程序錯(cuò)誤會(huì)導(dǎo)致系統(tǒng)復(fù)位嗎?
答 6:
錯(cuò)誤寫FLASH也能復(fù)位,程序超出,復(fù)位向量錯(cuò)誤等也可能導(dǎo)致復(fù)位。
答 7:
可能是復(fù)位電路問(wèn)題!
答 8:
經(jīng)測(cè)試,不是外部復(fù)位電路的問(wèn)題!
現(xiàn)在問(wèn)題應(yīng)該在中斷子程序?qū)χ骱瘮?shù)造成了不確定的影響上,
但是目前仍無(wú)法定位問(wèn)題在哪?
郁悶ing?。?!
現(xiàn)在問(wèn)題應(yīng)該在中斷子程序?qū)χ骱瘮?shù)造成了不確定的影響上,
但是目前仍無(wú)法定位問(wèn)題在哪?
郁悶ing?。?!
答 9:
是無(wú)法進(jìn)入中斷嗎還是其他的原因,能具體說(shuō)的詳細(xì)些嗎。
答 10:
呵呵,我的問(wèn)題是430出現(xiàn)不確定的復(fù)位,有時(shí)運(yùn)行幾分鐘就復(fù)位,有時(shí)能到幾十分鐘
而在這之前,我的程序是用的查詢方式處理外部事務(wù),一直運(yùn)行正常,沒(méi)有這個(gè)問(wèn)題
現(xiàn)在改為中斷來(lái)處理外部事務(wù),就出現(xiàn)了莫名的復(fù)位問(wèn)題
中斷是能正常進(jìn)入的??!
通過(guò)幾天的排查,現(xiàn)在問(wèn)題應(yīng)該在中斷子程序?qū)χ骱瘮?shù)造成了不確定的影響,
從而導(dǎo)致了系統(tǒng)復(fù)位。但無(wú)法定位問(wèn)題所在!
而在這之前,我的程序是用的查詢方式處理外部事務(wù),一直運(yùn)行正常,沒(méi)有這個(gè)問(wèn)題
現(xiàn)在改為中斷來(lái)處理外部事務(wù),就出現(xiàn)了莫名的復(fù)位問(wèn)題
中斷是能正常進(jìn)入的??!
通過(guò)幾天的排查,現(xiàn)在問(wèn)題應(yīng)該在中斷子程序?qū)χ骱瘮?shù)造成了不確定的影響,
從而導(dǎo)致了系統(tǒng)復(fù)位。但無(wú)法定位問(wèn)題所在!
答 11:
檢查一下數(shù)據(jù)指針吧,是否超出內(nèi)存范圍,看現(xiàn)象可能是這方面的影響
答 12:
程序發(fā)出來(lái)看看,不然干說(shuō)也是查不出來(lái)
答 13:
一個(gè)中斷一個(gè)中斷使能,一個(gè)一個(gè)排查。多試幾次就是了。把問(wèn)題分塊一個(gè)一個(gè)來(lái)??茨膫€(gè)出的問(wèn)題
這個(gè)跟單片機(jī)支持的斷點(diǎn)個(gè)數(shù)也是有關(guān)的。如果只支持一個(gè)斷點(diǎn),你設(shè)置了2個(gè),然后復(fù)位的話就容易跑到Cstart而不是Main。另外要注意IAR run to Main的復(fù)選框你勾上沒(méi)?
案例二:跑飛
void send_basic_data_to_dis_part()
{
}
//basic_data_buf[60] 數(shù)組所開(kāi)辟的長(zhǎng)度為60,但是在下面從basic_data_buf首地址起填裝數(shù)據(jù)的過(guò)程當(dāng)中,填寫的數(shù)據(jù)長(zhǎng)度超過(guò)了60,數(shù)組越界,破壞了棧內(nèi)保持的進(jìn)入send_basic_data_to_dis_part()函數(shù)之前保存的現(xiàn)場(chǎng)數(shù)據(jù),結(jié)果跳出該函數(shù)調(diào)用,要執(zhí)行下步的時(shí)候,由于SP內(nèi)的值已經(jīng)被修改,導(dǎo)致程序跑飛。(這種情況癥狀往往表現(xiàn)為:進(jìn)入某個(gè)函數(shù)內(nèi)正常,在跳出的時(shí)候就跑飛,多為在函數(shù)內(nèi)SP的指針被修改)
關(guān)鍵詞:
MSP430頻繁重啟跑
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論