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