Watchdog - 簡單的 WDT

材料準備

範例說明

介紹

這是一個簡單的Watchdog定時器 (WDT) 範例,示範了Watchdog API 的用法。 Watchdog的定義和工作原理可以參考以下資料。

Watchdog

Watchdog定時器是一種硬件定時器,用於檢測軟件故障的發生,然後在編程週期到期時自動生成系統重置或Watchdog中斷。
一般來說,想像一下您的微控制器陷入無限循環的情況,或者像微控制器在執行某些任務時卡住的任何情況。 正常的故障排除方法是按下重置按鈕並跳出無限循環。 然而,一直按下按鈕實際上是不可能的,因此,嵌入在微控制器中的Watchdog定時器可以幫助解決這種情況。

Feed the Dog

如果您的家中有一隻狗。 您需要定期餵食。 如果一天不能餵食,它會咬你! 同樣,這是Watchdog定時器背後的工作邏輯。

1

在我們的範例中,我們創建了2個任務,其中包含一次又一次重複運行的循環,一個稱為Small_Task任務,另一個稱為Big_Task任務。 我們使Watchdog定時器的初始值(5秒)大於Small_Task任務的總延遲,但比Big_Task任務的延遲短。
對於Small_Task任務的情況,Watchdog將在5秒內刷新/餵食,但是,對於Big_Task任務的情況,循環正在處理中,並且Watchdog在5秒後仍不刷新,這會觸發Watchdog 以重置處理器。 同樣,Watchdog定時器可以保護微控制器免受卡住情況的影響。

流程

連接開發板,然後從 Arduino IDE 打開範例,“File”->“Examples”->“AmebaWatchdog”->“SimpleWDT”。

1

上傳前需要完成 2 個設置。


定義名稱

設定值

功能說明
AON_WDT_Enable1Watchdog timer sets to always on
AON_WDT_Enable0always on disabled
RUN_CALLBACK_IF_WATCHDOG_BARKS1Execute IRQ functions after “barks”
RUN_CALLBACK_IF_WATCHDOG_BARKS0IRQ disabled

請注意,當“AON_WDT_Enable”設置為“1”時,不支持 IRQ。

1

成功上傳範例代碼後,打開串行監視器,然後按重置按鈕。
您會發現Small_Task任務可以在5秒內刷新Watchdog(初始化Watchdog定時器)。 但是,Big_Task任務將無法在5秒內刷新Watchdog,這將導致微控制器重置。

1

當設置“#define RUN_CALLBACK_IF_WATCHDOG_BARKS (0)”值為“1”時,用於自定義“my_watchdog_irq_handler”。 可以在處理程序中編寫代碼以執行。

1

請先確認已安裝QQ通訊軟體