Estoy usando la instalación de vigilancia de software a bordo de un Atmega328 como documentado here .
Mi propósito es limitar a 2 segundos la ejecución de una parte del código que podría llevar a una computación interminable.
Este es el esquema de pseudo-código:
enable watchdog (2 seconds)
run may-be-endless code
clear watchdog
run the rest
El resto del código debe ejecutarse si el código puede ejecutarse sin fin en el tiempo establecido, de lo contrario, se debe reiniciar todo el programa.
Este es el código Arduino que cargué en el tablero:
#include <avr/wdt.h>
void setup() {
Serial.begin(9600);
Serial.println("Started");
wdt_enable(WDTO_2S);
Serial.println("watchdog ON");
wdt_reset();
Serial.println("watchdog OFF");
}
void loop(){
Serial.println("loop...");
delay(1000);
}
En este punto, la salida esperada debe ser una impresión sin fin de mensajes loop...
, después de los de la configuración ( Started
, watchdog ON
/ OFF
).
Sorprendentemente, lo que obtengo en cambio es esto:
Started
watchdog ON
watchdog OFF
loop...
loop...
loop...
Started
watchdog ON
watchdog OFF
loop...
loop...
loop...
Started
watchdog ON
watchdog OFF
loop...
loop...
[...]
Aparentemente se está configurando el watchdog pero no se puede borrar. ¿Cómo es que?