<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MSP430重啟/頻繁重啟/跑飛 原因分析

MSP430重啟/頻繁重啟/跑飛 原因分析

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò ) 收藏
1、堆棧溢出導致頻繁重啟
案例1:
concern_tower_num為從鐵電內讀取的數據,因為鐵電沒(méi)有初始化,所以concern_tower_num的值很大
下面的程序一直循環(huán)到鐵電內concern_tower_num所在位置的值,所以超過(guò)了option內所設置的stack的最大容量導致堆棧溢出,重啟。
for(int i=0;i {
data[m]=crane_tower[i].crane_x;
m++;
data[m]=crane_tower[i].crane_y;
m++;
data[m]=crane_tower[i].front_arm_length;
m++;
}
2012.4.20 UESTC
2、數組越界:
定義了一個(gè)29字節長(cháng)度的數組: char back_info[29]={0};
結果給其填充50個(gè)字節的內容 memcpy( back_info+19,send_back_data,data_len); ,現象是堆棧沒(méi)有溢出,機器重啟。
2012.4.24 UESTC
問(wèn)
MSP430F147程序總是莫名其妙的重新啟動(dòng)?
已經(jīng)檢查了堆棧沒(méi)有溢出,WDT依然還是HOLD狀態(tài)
哪位高手指點(diǎn)一下,還有哪種可能性?
答 1:
先看IFG1.0位狀態(tài),看是什么原因導致復位
答 2:
您測量一下復位腳上的波形,看是否是硬件復位。
答 3:
你的工作環(huán)境??是不是干擾問(wèn)題?
是不是指針弄飛了??
答 4:
外部有看門(mén)狗嗎?有的話(huà)要先關(guān)掉。
答 5:
謝謝以上各位的回答:
我的具體情況是原來(lái)程序是用查詢(xún)方式,已經(jīng)通過(guò)測試,沒(méi)有這個(gè)問(wèn)題
而現在需要添加部分功能,為此把查詢(xún)方式改為了中斷方式(新功能還未添加),

現在已經(jīng)檢查過(guò)IFG1.0位0,不是內部看門(mén)狗導致復位
外部無(wú)看門(mén)狗,也無(wú)明顯干擾源
硬件復位可能性也不大,不過(guò)這個(gè)可以再測一下!

有可能是指針弄飛等程序錯誤,但是這種內部程序錯誤會(huì )導致系統復位嗎?
答 6:
錯誤寫(xiě)FLASH也能復位,程序超出,復位向量錯誤等也可能導致復位。
答 7:
可能是復位電路問(wèn)題!
答 8:
經(jīng)測試,不是外部復位電路的問(wèn)題!
現在問(wèn)題應該在中斷子程序對主函數造成了不確定的影響上,
但是目前仍無(wú)法定位問(wèn)題在哪?
郁悶ing?。?!
答 9:
是無(wú)法進(jìn)入中斷嗎還是其他的原因,能具體說(shuō)的詳細些嗎。
答 10:
呵呵,我的問(wèn)題是430出現不確定的復位,有時(shí)運行幾分鐘就復位,有時(shí)能到幾十分鐘
而在這之前,我的程序是用的查詢(xún)方式處理外部事務(wù),一直運行正常,沒(méi)有這個(gè)問(wèn)題
現在改為中斷來(lái)處理外部事務(wù),就出現了莫名的復位問(wèn)題

中斷是能正常進(jìn)入的??!

通過(guò)幾天的排查,現在問(wèn)題應該在中斷子程序對主函數造成了不確定的影響,
從而導致了系統復位。但無(wú)法定位問(wèn)題所在!
答 11:
檢查一下數據指針吧,是否超出內存范圍,看現象可能是這方面的影響
答 12:
程序發(fā)出來(lái)看看,不然干說(shuō)也是查不出來(lái)
答 13:
一個(gè)中斷一個(gè)中斷使能,一個(gè)一個(gè)排查。多試幾次就是了。把問(wèn)題分塊一個(gè)一個(gè)來(lái)??茨膫€(gè)出的問(wèn)題
這個(gè)跟單片機支持的斷點(diǎn)個(gè)數也是有關(guān)的。如果只支持一個(gè)斷點(diǎn),你設置了2個(gè),然后復位的話(huà)就容易跑到Cstart而不是Main。另外要注意IAR run to Main的復選框你勾上沒(méi)?
案例二:跑飛
void send_basic_data_to_dis_part()
{
char basic_data_buf[60]={0};
char frame_head[2]={0xFE,0xFB},frame_end[2]={0xFE,0xFA};
char frame_len[1]={0x45},frame_type[1]={0x40};
char bCRC[2]={0,0};
char tower_num[1]={0x08};
unsigned int addr=0;
addr=split_joint_hex_data( basic_data_buf,addr,frame_head,2);
addr=split_joint_hex_data( basic_data_buf,addr,frame_len,1);
addr=split_joint_hex_data( basic_data_buf,addr,frame_type,1);
addr=split_joint_hex_data( basic_data_buf,addr,tower_num,1);
for(uint8 i=0;i
{
addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].lcd_x),2);
addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].lcd_y),2);
addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].dis_fore_r),2);
addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].dis_back_r),2);
}
CRC16(bCRC,basic_data_buf+2, addr-2); //數據CRC校驗
addr=split_joint_hex_data( basic_data_buf,addr,bCRC,2);
addr=split_joint_hex_data( basic_data_buf,addr,frame_end,2);
UART2_Send_Buf(basic_data_buf,addr);
}
//basic_data_buf[60]數組所開(kāi)辟的長(cháng)度為60,但是在下面從basic_data_buf首地址起填裝數據的過(guò)程當中,填寫(xiě)的數據長(cháng)度超過(guò)了60,數組越界,破壞了棧內保持的進(jìn)入send_basic_data_to_dis_part()函數之前保存的現場(chǎng)數據,結果跳出該函數調用,要執行下步的時(shí)候,由于SP內的值已經(jīng)被修改,導致程序跑飛。(這種情況癥狀往往表現為:進(jìn)入某個(gè)函數內正常,在跳出的時(shí)候就跑飛,多為在函數內SP的指針被修改)



關(guān)鍵詞: MSP430頻繁重啟跑

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>