Watchdog - 簡單的 WDG 定時器

準備

  • AmebaD [AMB21 / AMB22 / AMB23 / BW16] x 1

範例説明

在此範例中,我們將使用在AmebaD AMB21/AMB22/AMB23 上運行的Watchdog計時器範例來說明如何使用Watchdog API。在詳細介紹範例之前,我們先簡要介紹一下“Watchdog”的定義及其工作原理。

Watchdog

Watchdog Timer(WDT)是一種硬件定時器,用於檢測軟件故障的發生,然後在編程週期到期時自動生成系統重置或Watchdog中斷。

一般來說,想像一下您的微控制器陷入無限循環的混亂情況,或者像微控制器在執行某些任務時卡住的任何情況。正常的故障排除方法是按下重置按鈕並跳出無限循環。 但是,實際上不可能一直都按下按鈕,因此,嵌入在微控制器內的Watchdog定時器將有助於解決這種情況。

1

Feed the Dog

如果您的家中有一隻狗。 您需要定期餵食。 如果一天不能餵食,它會咬你! 同樣,這是Watchdog定時器背後的工作邏輯。
在我們的範例中,我們創建了2個任務,其中包含一次又一次重複運行的循環,一個稱為Small_Task任務,另一個稱為Big_Task任務。 我們使Watchdog定時器的初始值(5秒)大於Small_Task任務的總延遲,但比Big_Task任務的延遲短。
對於Small_Task任務的情況,Watchdog將在5秒內刷新/餵食,但是,對於Big_Task任務的情況,循環正在處理中,並且Watchdog在5秒後仍不刷新,這會觸發Watchdog 以重置處理器。 同樣,Watchdog定時器可以保護微控制器免受卡住情況的影響。
然後我們開始說明本範例的編碼部分,對於本範例,您僅需要AMB21/AMB22/AMB23開發板。
Firstly, make sure the correct Ameba development board is selected in Arduino IDE: “Tools” “Board” “RTL8722CSM/RTL8722DM” (or “RTL8722DM MINI”). Then open the “Watchdog Timer” example in “File” “Examples” “AmebaWatchdog” “Watchdog Timer”:

2

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

3

4