日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机程序跑飞原因

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机程序跑飞原因 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:單片機程序又跑飛?
作者:嵌入式ARM
網址:https://mp.weixin.qq.com/s/a22zVdSfCqWjSmlBxK2R1Q

目錄

  • 數組越界/溢出
  • 中斷服務程序缺失
  • 看門狗復位

單片機中有看門狗,長時間不喂狗,程序就會復位。為什么長時間不喂狗呢?這是因為程序跑飛了,拋開外部因素不談。今天就和大家分享一下,單片機程序跑飛的幾個原因。

在編寫單片機程序的時候,由于中斷服務程序寫的不好,導致單片機程序總是跑飛,最后費了好長時間,花了很大功夫才找到問題原因,由此總結了單片機程序跑飛的三種現象、原因以及解決方法。

數組越界/溢出

現象:

單片機程序在函數中運行時,總是在運行到函數末尾,要跳出函數時,程序跑飛。

原因:

數組越界(數組溢出),函數中定義的數組元素的個數小于程序中實際使用的數組元素的個數,例如在函數中定義了一個數組ucDataBuff[10],這個數組只有10個元素,但是在函數中卻有這樣的語句ucDataBuff[10]=0x1a,這個語句是給數組的第11個元素賦值,:由于定義的數組只有10個元素,從而導致賦值語句中不知道把0x1a放到什么地方,從而導致程序跑飛。

解決方法:

如果在調試程序時,發現程序總是在函數執行完畢時跑飛,多數情況是發生了數組越界(數組溢出)的錯誤,仔細檢查函數中調用的數組是否存在越界(溢出)的情況。

中斷服務程序缺失

現象:

程序運行過程中總是跑飛。

原因:

程序中打開了某個中斷,但是卻沒有相應的中斷服務程序,從而導致在中斷發生后,找不到中斷服務程序入口,從而導致程序跑飛。

解決方法:

檢查程序中是否存在打開了某個中斷,但是沒有相對應的中斷服務程序。

看門狗復位

現象:

在執行一段較為耗費時間的程序時,程序跑飛,并且總是跳到復位位置處。

原因:

程序中使用了看門狗,但是沒有及時“喂狗”,從而導致看門狗復位,使程序直接跳到復位位置。

解決方法:

根據程序運行時間,尤其是一定要計算清楚最耗時的那段程序的運行時間,然后準確設置看門狗的復位時長,定時“喂狗”,尤其是如果有死循環的情況,一定要在死循環中記得“喂狗”。

總結

以上是生活随笔為你收集整理的单片机程序跑飞原因的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。