Watchdog 計時器範例

材料準備

  • Ameba1 RTL8195AM/RTL8710AF x 1

範例說明

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

Watchdog

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

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

4-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定時器可以保護微控制器免受卡住情況的影響。

然後我們開始說明本範例的編碼部分,對於本範例,您僅需要Ameba1 RTL8195AM/RTL8710AF開發板。

首先,確保在Arduino IDE中選擇了正確的Ameba開發板:“Tools”->“Board”->“RTL8195AM”(或 “RTL8710AF)。 然後在“File”->“Examples”->“AmebaWatchdog”->“Watchdog Timer”中打開“Watchdog Timer”範例:

4-2

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

4-3

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

4-4

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