1. 單片機跑飛的原因有哪些硬體的、軟體的、以及怎樣防止這種事情的發生
單片機跑飛的原因很多,硬體的軟體的都有:
1、硬體原因:電源不穩,紋波很大,浪涌很多都可能造成;電磁干擾過強也很容易造成;強弱電線纜混雜在一起很容易造成等待。
2、軟體原因:壓棧和出棧不等造成;主程序沒有循環等待。
2. 怎麼我的單片機程序老跑飛(STC的)而且跑飛後再寫也寫不進去。
1、你好我想問你知道跑飛的意思嗎,程序跑飛一般是指PC指針不按照你的程序思路去指向了,比如你退出中斷的時候應該回到之前的那個壓棧PC處卻沒有,這樣的現象我們認為程序跑飛。
2、對於程序跑飛一般我們採用看門狗的方式來讓程序復位,防止程序跑飛造成嚴重後果。
3、看不到現象不一定是跑飛,不過STC這類片子沒有模擬器支持的吧一般,如果是AVR或者PIC或者430用模擬器看看PC就知道了。
4、可以將某個口的輸出特徵電平,用於檢測程序是否跑飛,運行後檢測該口的電平是否有差異即可。
5、程序跑飛了是可以在寫入的,除非是晶元損壞了,是不是電源或者復位電平等導致晶元掛了,所以你認為是程序跑了一遍就掛掉了。
6、打好基礎,搞清楚細節問題,對你很有幫助,比如看門狗如何使用等這類問題,編程誰都會的,外面一大把都是。什麼高中畢業,大專生,就連現在本科生都去搶單片機的飯碗,搞不懂。
7、系統的學習,不要只看到片面的東西,學會自己的一套分析問題的方式。
8、打字很累,有時間hi我
3. 單片機程序老跑飛怎麼回事
1、程序本身設計錯誤。
2、硬體設計問題。
3、干擾信號過大。
如讀入開關量的信號,要在信號的最佳穩定期內讀入數據,就要花費不少調試時間的。
4. 單片機跑飛詳解
單片機程序死機,跑飛了可以從以下幾個方面查找原因:
1. 意外中斷。是否打開了某個中斷,但是沒有響應和清除中端標志,導致程序一直進入中斷,造成死機假象。
2. 中斷變數處理不妥。若定義某些會在中斷中修改的全局變數,這時要注意兩個問題:首先為了防止編譯器優化中斷變數,要在這些變數定義時前加volatile,其次在主循環中讀取中斷變數前應該首先關閉全局中斷,防止讀到一半被中斷給修改了,讀完之後再打開全局中斷;否則出現造成數據亂套。
3. 地址溢出,常見錯誤為指針操作錯誤。我要著重說的是數組下標使用循環函數中循環變數,如果循環變數沒控制好則會出現數組下標越界,意外修改系統的寄存器造成死機,這種情況下如果死機說明運氣好,否則後面不知道發生什麼頭疼的事。
4. 無條件的死循環;比如使用while(x);等待電平變化,正常情況下x都會變成0,就怕萬一,因此最好加上時間限制。
5. 看門狗沒有關閉。有的單片機即使沒使用看門狗開機時也有可能意外自動開啟了最小周期的看門狗,導致軟體不斷復位,造成死機,這個要看晶元手冊,最好在程序復位後首先應該顯式清除看門狗再關閉看門狗。
6. 堆棧溢出。最難查找的問題,對於容量小的單片機,盡量減少函數調用層級,減少局部變數,從而減少壓棧的時候所需的空間。當你把以上幾條都試過不能解決問題,試一試把你的被調用少函數直接內置到調用的地方並且把佔用RAM大的局部變數改成全局變數,試一試說不定就可以了。
5. 單片機程序跑飛怎麼去查找原因呢
對於簡單的錯誤,如果能初步猜測到執行哪個函數後跑飛的,那就可以直接單步調試,看看什麼原因,不外乎指針非法操作,數組越界之類的。
還有一種笨方法,注釋函數,如果注釋函數後bug不再現,那麼就可以按照剛剛說的單步進去這個函數,看看有什麼問題。
更有效的但是也對水平要求更高的方法可以看一下別人的方法。
下面是幾個鏈接,可以看看,學習一下。
記一次STM32中HardFault問題的調試解決
如何找到導致程序出現HardFault
STM32硬體錯誤HardFault_Handler的處理方
定位產生HARD FAULT之前的代碼
6. 負載中電流增大 單片機跑飛,這是什麼原因
每當電機的轉矩增大的時候,單片機就要跑飛,:原因是電源供電不足,你的電源是可供幾安的?選 一個大功耗的電源。,不好意思,上次答案沒有看清楚題目.:::都說的這么明白了,電機兩端一定要並聯電容,104,103都可以,我做了這么多年開發,沒有發現電機兩端不能並聯接電容的,電機兩端一定要並聯電容,這是必須的,沒條件可談的.如果連電機兩端並聯電容都不會,你就請教電子工程 師吧。如果你明白電機,電磁干擾,跑飛正常,電機兩端接個電容便可以了,電機兩端一定要加一個104電容,是濾掉電磁火花產生的干擾,樓下的說不加電容,想必是水平膚淺,誤人子弟而已 。另外,如果還不行,將給電機的電源與單片機的電源分開成兩組,單片機的電源前面加一個穩壓電路。 注意:103,104就是電容值的大小,如果不明白104,就上網查是多少。
7. 單片機程序飛掉的原因
1.外圍干擾(EMI等)
2.電壓波動(電源電壓不穩定)
3.如果有內部看門狗,要正確設置或是不用.
4.產生中斷一定要有正確的返回指令,否則程序也不知道會飛到哪裡去.
5.溫濕度也有可能引起這種情況.
8. Q3:單片機在斷電後又及時上電,為什麼程序會跑飛
你說的是類似於尖峰電壓干擾,此時電壓會發生變化,但又不足以讓單片機復位,但會引起單片機的部分寄存器值的變化,單片機寄存器就如電腦的內存一樣,其值發生變化,程序狀態就會發生變化,從而引起程序跑飛。
9. 請問軟體上什麼因素會導致單片機跑飛忽略硬體因素。
其實 不一定是 程序 跑飛,單片機運行程序 本身 會跳來跳去的,如執行 子程序、子程序返回,
中斷程序、中斷返回 等等,
如果 程序 沒有按照 預期的 設計思路走,因素很多,
程序編譯時keil沒有報錯,只要語法正確就能通過,
有經驗的編程人員也會碰到 想像不到的問題的,
有問題 只能 反復查看程序。
10. 標題單片機使程序跑飛或進入死循環,如何利用看門狗擺脫困境
可採用看門狗定時器。
工作原理如下:「看門狗」技術就是使用一個「看門狗」定時器來對系統時鍾不斷計數,監視程序的運行。當看門狗定時器啟動運行後,為防止看門狗定時器的不必要溢出而引起單片機的非正常的復位,應定期地把看門狗定時器清0,以保證看門狗定時器不溢出。當由於干擾,使單片機程序「跑飛」或陷入「死循環」時,單片機也就不能正常運行程序來定時地把看門狗定時器清0,當看門狗定時器計滿溢出時,將在AT89S52的RST引腳上輸出一個正脈沖(寬度為98個時鍾周期),使單片機復位,在系統的復位入口0000H處重新開始執行主程序,從而使程序擺脫「跑飛」或「死循環」狀態,讓單片機歸復於正常的工作狀態。