Arduino 中的看門狗定時器
看門狗定時器是任何微控制器的基本部分。如果程式停留在某處,它會重置該程式。簡單來說,看門狗定時器的運作方式如下 -
定時器會一直遞增。
該程式必須確保它會一直重置該定時器,即不允許它溢位。
如果定時器溢位,則表示該程式停留在某處,因此無法重置該定時器。在定時器溢位時會生成一箇中斷,該中斷會重置微控制器。
要在 Arduino 中實施看門狗定時器,我們使用 avr wdt 庫。
程式碼如下 -
#include<avr/wdt.h>
void setup() {
Serial.begin(9600);
wdt_disable(); //Disable WDT
delay(3000);
wdt_enable(WDTO_2S); //Enable WDT with a timeout of 2 seconds
Serial.println("WDT Enabled");
}
void loop() {
for(int i = 0; i<5; i++)
{
Serial.println("Looping");
delay(1000);
wdt_reset(); //Reset the watchdog
}
while(1); //Watchdog timer should get triggered here
}如你所見,我們初始化 Serial 然後首先停用看門狗定時器。然後引入 3 秒的延遲。程式不會在此處重置,因為看門狗已停用。現在,啟用了超時時間為 2 秒的看門狗定時器。這意味著,如果程式不能每 2 秒重置一次該定時器,那麼看門狗就會被觸發並重啟微控制器。
在迴圈中,我們首先列印到 Serial 5 秒,確保每秒重置一次看門狗。到目前為止,該程式執行良好。然後,我們進入一個無限的 while 迴圈。在這裡,由於我們沒有重置 wdt,因此它將被觸發並重啟 Arduino。
請注意,預置的看門狗超時值範圍為 15 毫秒到 8 秒。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP