單片機(jī)中有看門狗,長時間不喂狗,程序就會復(fù)位。為什么長時間不喂狗呢?這是因?yàn)槌绦蚺茱w了,拋開外部因素不談。今天就和大家分享一下,單片機(jī)程序跑飛的幾個原因。
在編寫單片機(jī)程序的時候,由于中斷服務(wù)程序?qū)懙牟缓?,?dǎo)致單片機(jī)程序總是跑飛,最后費(fèi)了好長時間,花了很大功夫才找到問題原因,由此總結(jié)了單片機(jī)程序跑飛的三種現(xiàn)象、原因以及解決方法。
01數(shù)組越界/溢出
現(xiàn)象:
單片機(jī)程序在函數(shù)中運(yùn)行時,總是在運(yùn)行到函數(shù)末尾,要跳出函數(shù)時,程序跑飛。
原因:
數(shù)組越界(數(shù)組溢出),函數(shù)中定義的數(shù)組元素的個數(shù)小于程序中實(shí)際使用的數(shù)組元素的個數(shù),例如在函數(shù)中定義了一個數(shù)組ucDataBuff[10],這個數(shù)組只有10個元素,但是在函數(shù)中卻有這樣的語句ucDataBuff[10]=0x1a,這個語句是給數(shù)組的第11個元素賦值,:由于定義的數(shù)組只有10個元素,從而導(dǎo)致賦值語句中不知道把0x1a放到什么地方,從而導(dǎo)致程序跑飛。
解決方法:
如果在調(diào)試程序時,發(fā)現(xiàn)程序總是在函數(shù)執(zhí)行完畢時跑飛,多數(shù)情況是發(fā)生了數(shù)組越界(數(shù)組溢出)的錯誤,仔細(xì)檢查函數(shù)中調(diào)用的數(shù)組是否存在越界(溢出)的情況。
0
2
中斷服務(wù)程序缺失
現(xiàn)象:
程序運(yùn)行過程中總是跑飛。
原因:
程序中打開了某個中斷,但是卻沒有相應(yīng)的中斷服務(wù)程序,從而導(dǎo)致在中斷發(fā)生后,找不到中斷服務(wù)程序入口,從而導(dǎo)致程序跑飛。
解決方法:
檢查程序中是否存在打開了某個中斷,但是沒有相對應(yīng)的中斷服務(wù)程序。
0
3
看門狗復(fù)位
現(xiàn)象:
在執(zhí)行一段較為耗費(fèi)時間的程序時,程序跑飛,并且總是跳到復(fù)位位置處。
原因:
程序中使用了看門狗,但是沒有及時“喂狗”,從而導(dǎo)致看門狗復(fù)位,使程序直接跳到復(fù)位位置。
解決方法:
根據(jù)程序運(yùn)行時間,尤其是一定要計算清楚最耗時的那段程序的運(yùn)行時間,然后準(zhǔn)確設(shè)置看門狗的復(fù)位時長,定時“喂狗”,尤其是如果有死循環(huán)的情況,一定要在死循環(huán)中記得“喂狗”。
責(zé)任編輯:haq
-
單片機(jī)
+關(guān)注
關(guān)注
6074文章
45322瀏覽量
662979 -
看門狗
+關(guān)注
關(guān)注
10文章
607瀏覽量
72554 -
程序
+關(guān)注
關(guān)注
117文章
3836瀏覽量
84738
原文標(biāo)題:單片機(jī)程序又跑飛?
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
在使用Saiyuan的CW32單片機(jī)時,頻率調(diào)整導(dǎo)致系統(tǒng)跑飛,影響正常運(yùn)行,怎么解決?
單片機(jī)如何選擇復(fù)位方式?
用IAP去升級,遇見跑飛現(xiàn)象怎么解決
單片機(jī)應(yīng)用系統(tǒng)的可靠性設(shè)計介紹
單片機(jī)可靠性差的解決辦法
單片機(jī)燒錄原理是怎樣的?輝芒微單片機(jī)燒錄程序詳細(xì)步驟講解
怎么測單片機(jī)系統(tǒng)頻率
單片機(jī)怎么燒程序
Deepseek上單片機(jī)?RT-Thread上跑通大語言模型
基于單片機(jī)的磁致伸縮位移傳感器的應(yīng)用

致單片機(jī)程序總是跑飛怎么辦
評論