<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          現(xiàn)在已經(jīng)檢查過IFG1.0位0,不是內(nèi)部看門狗導(dǎo)致復(fù)位
          外部無看門狗,也無明顯干擾源
          硬件復(fù)位可能性也不大,不過這個可以再測一下!

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

          中斷是能正常進(jìn)入的?。?br />
          通過幾天的排查,現(xiàn)在問題應(yīng)該在中斷子程序?qū)χ骱瘮?shù)造成了不確定的影響,
          從而導(dǎo)致了系統(tǒng)復(fù)位。但無法定位問題所在!
          答 11:
          檢查一下數(shù)據(jù)指針吧,是否超出內(nèi)存范圍,看現(xiàn)象可能是這方面的影響
          答 12:
          程序發(fā)出來看看,不然干說也是查不出來
          答 13:
          一個中斷一個中斷使能,一個一個排查。多試幾次就是了。把問題分塊一個一個來??茨膫€出的問題
          這個跟單片機(jī)支持的斷點個數(shù)也是有關(guān)的。如果只支持一個斷點,你設(shè)置了2個,然后復(fù)位的話就容易跑到Cstart而不是Main。另外要注意IAR run to Main的復(fù)選框你勾上沒?
          案例二:跑飛
          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); //數(shù)據(jù)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]數(shù)組所開辟的長度為60,但是在下面從basic_data_buf首地址起填裝數(shù)據(jù)的過程當(dāng)中,填寫的數(shù)據(jù)長度超過了60,數(shù)組越界,破壞了棧內(nèi)保持的進(jìn)入send_basic_data_to_dis_part()函數(shù)之前保存的現(xiàn)場數(shù)據(jù),結(jié)果跳出該函數(shù)調(diào)用,要執(zhí)行下步的時候,由于SP內(nèi)的值已經(jīng)被修改,導(dǎo)致程序跑飛。(這種情況癥狀往往表現(xiàn)為:進(jìn)入某個函數(shù)內(nèi)正常,在跳出的時候就跑飛,多為在函數(shù)內(nèi)SP的指針被修改)



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

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();