① 單片機程序跑飛怎麼去查找原因呢
對於簡單的錯誤,如果能初步猜測到執行哪個函數後跑飛的,那就可以直接單步調試,看看什麼原因,不外乎指針非法操作,數組越界之類的。
還有一種笨方法,注釋函數,如果注釋函數後bug不再現,那麼就可以按照剛剛說的單步進去這個函數,看看有什麼問題。
更有效的但是也對水平要求更高的方法可以看一下別人的方法。
下面是幾個鏈接,可以看看,學習一下。
記一次STM32中HardFault問題的調試解決
如何找到導致程序出現HardFault
STM32硬體錯誤HardFault_Handler的處理方
定位產生HARD FAULT之前的代碼
② 單片機程序跑飛的疑問
所謂程序跑飛就隱槐是PC指針沒有按照預定的程序變更,可能PC指針指向一個不確定的或者根本就沒有存放用戶代碼的拍攜手程序存貯空間,造成PC指針根本無法恢復到用戶代碼空間之內,程序跑飛,當發生中斷時,中斷服務程序代碼襲嫌仍然可以被執行。
③ 標題單片機使程序跑飛或進入死循環,如何利用看門狗擺脫困境
可採用看門狗定時器。
工作原理如下:「看門狗」技術就是使用一個「看門狗」定時器來對系統時鍾不斷計數,監視程序的運行。當看門狗定時器啟動運行後,為防止看門狗定時器的不必要溢出而引起單片機的非正常的復位,應定期地把看門狗定時器清0,以保證看門狗定時器不溢出。當由於干擾,使單片機程序「跑飛」或陷入「死循環」時,單片機也就不能正常運行程序來定時地把看門狗定時器清0,當看門狗定時器計滿溢出時,將在AT89S52的RST引腳上輸出一個正脈沖(寬度為98個時鍾周期),使單片機復位,在系統的復位入口0000H處重新開始執行主程序,從而使程序擺脫「跑飛」或「死循環」狀態,讓單片機歸復於正常的工作狀態。
④ 單片機跑飛的後果是什麼
對的
void main()
{
初始化緩灶
while(1)
{
主循環
}
跑飛會死機,控制錯誤等。可以開啟看門山悔狗,確保程序逗哪正不跑飛
}
⑤ 單片機程序跑飛問題
用看門狗,跑飛了一回重新啟動運世,干擾把電源做好一點皮悄兆,濾波做好一點,如果有必要可以加個金屬屏蔽罩之類的,單片機選擇抗干擾性能好點的,比如AVR,STC這些,根據對C8051F系列的抗干擾測試燃租,這單片機不適合在干擾大的地方使用,其他430單片機沒測試過,還不知道抗干擾怎麼樣。謝謝
⑥ 請問軟體上什麼因素會導致單片機跑飛忽略硬體因素。
其實 不一定是 程序 跑飛,單片機運行程序 本身 會跳來跳去的,如執行 子程序、子程序返回,
中斷程序、中斷返回 等等,
如果 程序 沒有按照 預期的 設計思路走,因素很多,
程序編譯時keil沒有報錯,只要語法正確就能通過,
有經驗的編程人員也會碰到 想像不到的問題的,
有問題 只能 反復查看程序。
⑦ stc單片機容易跑飛
stc晶元本身不穩定,抗干擾能力極差!stc單片機不能用於工控。跑飛原因有幾個
1 看看有沒有堆棧溢出
2程序儲存段有沒有越界。
3電源電壓不穩,加大電源濾波電容加一個5伏穩壓二極體
4io口是否受到外界干擾最好加光耦隔離
5如果自動復位,復位引腳不用時接上拉電阻到5伏,同時引腳加個對地電容
6板子地線要接地
⑧ 請教單片機程序跑飛的問題
程序異常,很多情況都是軟體代碼有問題,常見的就是RAM數據地址溢出
比如定義的table[10],在程序訪問的table[i]中i的值>9
所以你還是先仔細查看一下你的代碼有沒有問題,
其次就是電路板上有強的干擾,不過現在的單片機基本上干擾引起的往往只是復位,很少見到程序跑飛的情況
⑨ 單片機跑飛詳解
單片機程序死機,跑飛了可以從以下幾個方面查找原因:
1. 意外中斷。是否打開了某個中斷,但是沒有響應和清除中端標志,導致程序一直進入中斷,造成死機假象。
2. 中斷變數處理不妥。若定義某些會在中斷中修改的全局變數,這時要注意兩個問題:首先為了防止編譯器優化中斷變數,要在這些變數定義時前加volatile,其次在主循環中讀取中斷變數前應該首先關閉全局中斷,防止讀到一半被中斷給修改了,讀完之後再打開全局中斷;否則出現造成數據亂套。
3. 地址溢出,常見錯誤為指針操作錯誤。我要著重說的是數組下標使用循環函數中循環變數,如果循環變數沒控制好則會出現數組下標越界,意外修改系統的寄存器造成死機,這種情況下如果死機說明運氣好,否則後面不知道發生什麼頭疼的事。
4. 無條件的死循環;比如使用while(x);等待電平變化,正常情況下x都會變成0,就怕萬一,因此最好加上時間限制。
5. 看門狗沒有關閉。有的單片機即使沒使用看門狗開機時也有可能意外自動開啟了最小周期的看門狗,導致軟體不斷復位,造成死機,這個要看晶元手冊,最好在程序復位後首先應該顯式清除看門狗再關閉看門狗。
6. 堆棧溢出。最難查找的問題,對於容量小的單片機,盡量減少函數調用層級,減少局部變數,從而減少壓棧的時候所需的空間。當你把以上幾條都試過不能解決問題,試一試把你的被調用少函數直接內置到調用的地方並且把佔用RAM大的局部變數改成全局變數,試一試說不定就可以了。
⑩ 單片機跑飛了,怎麼解決
設計一個「看門狗」,或者設計一些能夠讓程序在出錯時回歸正常的錯誤應急機制——「軟體陷阱」,這些都是要依你自己的程序的功能而設計,所以還是自己多想多試試的好,一來可以積累經驗,二來可以提高自己編程的能力,三來可以提高自己分析和解決問題的能力。何樂而不為呢!?