我有Arduino代码,在其中我实现了一个8秒的看门狗。为了进行测试,我放置了一个for循环,一切都正常工作。
我想知道在Arduino中发生看门狗超时时是否可以打印消息,特别是我要做的是在由监视狗引起的重置发生时由XBee发送消息。我已经有了XBee逻辑,我怎么知道何时会发生这种重置?
我已经尝试过这里提出的解决方案,但对我来说不管用:
我的代码:
#include <avr/wdt.h>
void setup() {
Serial.begin(9600);
Serial.println("turning on");
delay(1000);
watchdogsetup();
}
void loop() {
for (int i = 0; i <= 9; i++) {
Serial.println();
delay(1000);
} //Test to activate watchdog
//My code ....
//....
wdt_reset(); // reset the watch dog to zero
}发布于 2020-11-27 13:04:43
只是个主意。
当看门狗触发时,不确定通过XBee发送消息所需的时间和资源是否仍然可用,因此该消息最好是在Arduino重置并再次正常运行之后发送。
我认为,看门狗定时器确实设置了一个标志,该标志可以从重置本身中幸存下来,但是引导加载程序会清除它,因此,如果使用引导加载程序,信息就会丢失。
因此,您需要设置自己的标志,并在Arduino重置后读取该标志。您可以尝试编写一个中断处理程序,并添加一些其他东西来将标志写入EEPROM,如下所示(未经测试):
#include <EEPROM.h>
int addr = 0; // Or whatever EEPROM address you like
setup() {
if (EEPROM.read(addr) == 1) { //If a WDT flag was set
// Send panicky message by XBee here
}
EEPROM.write(addr, 0); // Reset the WDT flag
// Rest of setup() goes here
}
ISR(WDT_vect) {
EEPROM.write(addr, 1); // Set the WDT flag
}..。并希望Arduino没有崩溃,除了能够写信给EEPROM时,看门狗开火。
https://stackoverflow.com/questions/65014277
复制相似问题