在嵌入式開發中,系統一旦“跑飛”,工程師最怕的不是 bug,而是程序卡死無人知。這時,芯片自身的自我保護機制就至關重要。看門狗、復位源和異常處理機制,是保證系統可靠性的三大基石。本文帶你梳理清楚它們的作用、原理與應用。
一、看門狗定時器(Watchdog Timer)
1. 原理
看門狗定時器本質上是一個獨立定時器,持續倒計時:
- 軟件在規定時間內“喂狗”(重置看門狗計數器),系統繼續運行。
- 如果程序死循環或跑飛,沒有及時喂狗,看門狗觸發復位,將 MCU 拉回初始狀態。
示例:STM32 獨立看門狗 IWDG 喂狗代碼
- #include"stm32f4xx_hal.h"
- IWDG_HandleTypeDef hiwdg;
- voidWatchdog_Init(void){
- hiwdg.Instance=IWDG;
- hiwdg.Init.Prescaler=IWDG_PRESCALER_64;
- hiwdg.Init.Reload=0x0FFF;// 最大計數
- HAL_IWDG_Init(&hiwdg);
- }
- voidFeed_Watchdog(void){
- HAL_IWDG_Refresh(&hiwdg);// 喂狗
- }
- intmain(void){
- HAL_Init();
- Watchdog_Init();
- while(1){
- // 主循環任務
- Feed_Watchdog();// 喂狗
- HAL_Delay(100);// 模擬其他操作
- }
- }
2. 應用場景
3. 開發注意點
- 喂狗操作應放在主循環關鍵路徑或任務完成后,而不是單純在中斷中定時喂,否則失去意義。
- 某些 MCU 提供獨立看門狗(IWDG)與窗口看門狗(WWDG),后者要求“既不能太早喂,也不能太晚喂”,增加可靠性。
二、復位源(Reset Source)
復位讓 MCU 回到確定的起點,觸發來源多樣:
- 上電復位(POR)
- 外部復位(External Reset)
- 看門狗復位
- 低電壓復位(Brown-out Reset)
- 軟件復位(Software Reset)
示例:軟件復位 STM32
- #include"stm32f4xx_hal.h"
- voidSoftware_Reset(void){
- NVIC_SystemReset();// 觸發軟件復位
- }
復位意義
- 保證系統回到安全初始狀態
- 避免在電源或邏輯異常下繼續運行
- 給系統“第二次機會”
三、異常處理機制(Exception Handling)
即使有看門狗和復位,系統運行中仍可能遇到不可避免的異常,如訪問非法地址、總線錯誤或中斷嵌套沖突。
1. 異常來源
- 硬件異常:除零錯誤、非法指令、總線錯誤
- 系統異常:中斷優先級沖突、棧溢出
- 軟件異常:數組越界、指針錯誤
2. 處理方式
- 異常向量表:啟動時建立,不同異常對應不同入口函數。
- 硬件保護:部分 MCU 自動保存現場寄存器,便于恢復。
- 軟件處理:開發者可編寫異常處理函數(如HardFault_Handler),打印或記錄錯誤信息。
示例:Cortex-M HardFault 處理
- voidHardFault_Handler(void){
- // 可以點亮 LED 或輸出日志
- while(1){
- // 死循環,等待復位或調試
- }
- }
3. 應用實踐
- Cortex-M 系列常見異常:
- HardFault(硬錯誤)
- MemManage(存儲器管理錯誤)
- BusFault(總線錯誤)
- UsageFault(用法錯誤)
- 異常處理函數中可加入死循環 + LED 閃爍或日志打印,方便調試。
四、三者關系
- 看門狗:主動防御程序“卡死”
- 復位源:系統“重啟按鈕”,確保安全狀態
- 異常處理:運行中診斷問題
它們共同構成系統的三道保險:
- 1.異常處理發現問題
- 2.看門狗在關鍵時刻觸發復位
- 3.復位源保證重啟后系統穩定
總結
在嵌入式開發中,功能跑通只是第一步,系統可靠性才是真正考驗。
- 看門狗確保程序不會永久卡死
- 復位源保證系統能安全回到起點
- 異常處理機制幫助定位問題
三者配合,才能讓嵌入式系統在無人值守的環境下長期穩定運行。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
看門狗
+關注
關注
10文章
605瀏覽量
72531 -
定時器
+關注
關注
23文章
3356瀏覽量
121580 -
異常處理
+關注
關注
0文章
15瀏覽量
7445
發布評論請先 登錄
相關推薦
熱點推薦
一文詳解看門狗定時器
看門狗定時器由獨立的1 Mhz 片內振蕩器驅動。這是VCC = 5V 時的典型值。請參見特性數據以了解其他VCC 電平下的典型值。通過設置看門狗定時
發表于 09-02 16:40
?4830次閱讀
看門狗定時器的設計、工作原理及看門狗定時器的操作
看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數器,一般給看門狗一個數字,程序開始運行后看門狗
發表于 05-23 09:14
?8495次閱讀
看門狗喂狗時間及程序
,過一段時間CPU應發出指令讓看門狗復位,重新開始倒計數。如果看門狗減到0就認為程序沒有正常工作,強制整個系統復位。 看門狗分硬件
發表于 10-16 09:19
?1.8w次閱讀
dsp看門狗定時器的作用解析
看門狗在外圍監控DSP中軟件的運行以及硬件的操作,當CPU出現故障時,看門狗將執行系統復位。如果軟件進入了一個不正確的循環或者CPU出現暫時的混亂,看門狗
發表于 11-21 16:52
?1.5w次閱讀
基于VxWorks的看門狗定高效定時機制設計實現
VxWorks提供了一個看門狗定時器(watchDog timer),它由以下四個函數維護:
wdCreate( ) 創建并初始化一個看門狗定時器;wdDelete( ) 終止并
發表于 03-06 09:22
?5369次閱讀
TB3123 - PIC?單片機的窗口看門狗定時器
窗口看門狗定時器(Windowed Watchdog Timer,WWDT)是PIC單片機的增強型看門狗定時器。該定時器是PIC單片機現有
發表于 03-26 14:35
?0次下載
看門狗定時器防止溢出復位程序
看門狗定時器用來防止程序因供電電源、空間電磁干擾或其它原因引起的強烈干擾噪聲而跑飛的事故。程序中設置看TL=WDTPW+WDTCNTCL,當程序跑飛不能及時清零看門狗,導致看門狗溢出
發表于 04-23 09:59
?5155次閱讀
LPC2294看門狗定時器
看門狗定時器(WDT)特點1.如果不定期重新裝載,會內部重置芯片2.調試模式3.由軟件啟動,但是需要硬件復位或者看門狗復位/中斷才能禁用。4
發表于 12-04 10:36
?8次下載
看門狗定時器
看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數器,一般給看門狗一個數字,程序開始運行后看門狗
發表于 12-09 09:21
?7次下載
內部和外部看門狗定時器的比較
本文比較了內部(與微處理器集成)和外部(基于硬件)看門狗定時器(WDT)的優缺點。它解釋了內部看門狗定時器易于實現,但容易發生故障。MAXQ

看門狗定時器、復位源、異常處理機制科普
評論