在編寫單片機程序的時候,由于中斷服務程序寫的不好,導致單片機程序總是跑飛,最后費了好長時間,花了很大功夫才找到問題原因,由此總結了單片機程序跑飛的三種現(xiàn)象、原因及解決方法。
單片機程序在函數中運行時,總是在運行到函數末尾,要跳出函數時,程序跑飛。
原因:
數組越界(數組溢出),函數中定義的數組元素的個數小于程序中實際使用的數組元素的個數,例如在函數中定義了一個數組ucDataBuff[10],這個數組只有10個元素,但是在函數中卻有這樣的語句ucDataBuff[10]=0x1a,這個語句是給數組的第11個元素賦值,:由于定義的數組只有10個元素,從而導致賦值語句中不知道把0x1a放到什么地方,從而導致程序跑飛。
解決方法:
如果在調試程序時,發(fā)現(xiàn)程序總是在函數執(zhí)行完畢時跑飛,多數情況是發(fā)生了數組越界(數組溢出)的錯誤,仔細檢查函數中調用的數組是否存在越界(溢出)的情況。
02
中斷服務程序缺失現(xiàn)象:
程序運行過程中總是跑飛。
原因:
程序中打開了某個中斷,但是卻沒有相應的中斷服務程序,從而導致在中斷發(fā)生后,找不到中斷服務程序入口,從而導致程序跑飛。
解決方法:
檢查程序中是否存在打開了某個中斷,但是沒有相對應的中斷服務程序。
03
看門狗復位現(xiàn)象:
在執(zhí)行一段較為耗費時間的程序時,程序跑飛,并且總是跳到復位位置處。
原因:
程序中使用了看門狗,但是沒有及時“喂狗”,從而導致看門狗復位,使程序直接跳到復位位置。
解決方法:
根據程序運行時間,尤其是一定要計算清楚最耗時的那段程序的運行時間,然后準確設置看門狗的復位時長,定時“喂狗”,尤其是如果有死循環(huán)的情況,一定要在死循環(huán)中記得“喂狗”。
END
來源:網絡版權歸原作者所有,如有侵權,請聯(lián)系刪除。






