① stc單片機容易跑飛
stc晶元本身不穩定,抗干擾能力極差!stc單片機不能用於工控。跑飛原因有幾個
1 看看有沒有堆棧溢出
2程序儲存段有沒有越界。
3電源電壓不穩,加大電源濾波電容加一個5伏穩壓二極體
4io口是否受到外界干擾最好加光耦隔離
5如果自動復位,復位引腳不用時接上拉電阻到5伏,同時引腳加個對地電容
6板子地線要接地
② 單片機程序老是跑飛怎麼回事
最常見的是堆棧溢出,
你用操作系統沒?
你操作堆棧沒?
你用了匯編沒?
你的函數/中斷 調用進入死循環沒?
你的提問 跑飛並沒有明確說明現象。所以一般人很難回答
③ 什麼叫單片機的程序「跑飛」
程序本來是按設定運行的,如你編的程序在存儲器中的地址是0-1000,由於某種原因
(干
擾或程序漏洞),程序運行在了1000之後的區域,就
是程序「跑飛」
這裡面可不是你要的代碼,根你設定的運行過程毫無關系,也許只有運行完了(程序計數器加到
最大值後自動清0),才能回到程序的開頭,也許死在某個地方,永遠回不來了
這時如果有看門狗,就可以復位或回到你程序設定的某個地方
④ 單片機程序跑飛怎麼去查找原因呢
對於簡單的錯誤,如果能初步猜測到執行哪個函數後跑飛的,那就可以直接單步調試,看看什麼原因,不外乎指針非法操作,數組越界之類的。
還有一種笨方法,注釋函數,如果注釋函數後bug不再現,那麼就可以按照剛剛說的單步進去這個函數,看看有什麼問題。
更有效的但是也對水平要求更高的方法可以看一下別人的方法。
下面是幾個鏈接,可以看看,學習一下。
記一次STM32中HardFault問題的調試解決
如何找到導致程序出現HardFault
STM32硬體錯誤HardFault_Handler的處理方
定位產生HARD FAULT之前的代碼
⑤ 單片機跑飛了,怎麼解決
設計一個「看門狗」,或者設計一些能夠讓程序在出錯時回歸正常的錯誤應急機制——「軟體陷阱」,這些都是要依你自己的程序的功能而設計,所以還是自己多想多試試的好,一來可以積累經驗,二來可以提高自己編程的能力,三來可以提高自己分析和解決問題的能力。何樂而不為呢!?
⑥ 51單片機程序跑飛什麼意思怎麼解決
程序跑飛就是程序執行錯誤,程序不知道運行到哪裡,這就需要設定標志位,尋找跑飛的地方,再改
⑦ 單片機跑飛的原因有哪些硬體的、軟體的、以及怎樣防止這種事情的發生
單片機跑飛的原因很多,硬體的軟體的都有:
1、硬體原因:電源不穩,紋波很大,浪涌很多都可能造成;電磁干擾過強也很容易造成;強弱電線纜混雜在一起很容易造成等待。
2、軟體原因:壓棧和出棧不等造成;主程序沒有循環等待。
⑧ 單片機程序跑飛了,大家有什麼好辦法沒
單片機使用隔離電源供電,繼電器控制端使用光耦隔離,光耦的電源也要使用隔離電源供電。 就用當前的電源,,可以在光耦的電源上串入22uH的電感,單片機VCC與GND之間接入盡可能大的電容,同時增加0.01-0.1uF的滌綸電容,單片機電源和地也串入棒感。單片機控制繼電器的引腳串接22歐左右的電阻。光耦電源隔離一般用DC/DC,隔離度高,體積小,只是會增加點成本。用看門狗的話啟動復位會讓RAM區的數據丟失。是這樣的嗎。是的,除非你把數據寫到單片機外的存儲器中,如24C02之類的。
⑨ 單片機跑飛詳解
單片機程序死機,跑飛了可以從以下幾個方面查找原因:
1. 意外中斷。是否打開了某個中斷,但是沒有響應和清除中端標志,導致程序一直進入中斷,造成死機假象。
2. 中斷變數處理不妥。若定義某些會在中斷中修改的全局變數,這時要注意兩個問題:首先為了防止編譯器優化中斷變數,要在這些變數定義時前加volatile,其次在主循環中讀取中斷變數前應該首先關閉全局中斷,防止讀到一半被中斷給修改了,讀完之後再打開全局中斷;否則出現造成數據亂套。
3. 地址溢出,常見錯誤為指針操作錯誤。我要著重說的是數組下標使用循環函數中循環變數,如果循環變數沒控制好則會出現數組下標越界,意外修改系統的寄存器造成死機,這種情況下如果死機說明運氣好,否則後面不知道發生什麼頭疼的事。
4. 無條件的死循環;比如使用while(x);等待電平變化,正常情況下x都會變成0,就怕萬一,因此最好加上時間限制。
5. 看門狗沒有關閉。有的單片機即使沒使用看門狗開機時也有可能意外自動開啟了最小周期的看門狗,導致軟體不斷復位,造成死機,這個要看晶元手冊,最好在程序復位後首先應該顯式清除看門狗再關閉看門狗。
6. 堆棧溢出。最難查找的問題,對於容量小的單片機,盡量減少函數調用層級,減少局部變數,從而減少壓棧的時候所需的空間。當你把以上幾條都試過不能解決問題,試一試把你的被調用少函數直接內置到調用的地方並且把佔用RAM大的局部變數改成全局變數,試一試說不定就可以了。