He contestado con un "
Si, siempre" pero deseo haceros una (creo que interesante) reflexión sobre el tema.
El mejor programa, el mas elaborado, el mas perfecto y revisado del mundo, el mas libre de bugs y limpio de inconsistencias y redundancias puede contener en su entrañas la posibilidad remota de que, bajo ciertas circunstancias totalmente impredecibles, extrañas y recónditas pero reales a fin de cuentas, se cuele en ese limbo indefinido del que nunca sale.
Podemos llegar a la conclusión de que nuestro mas preciado programa es fiable en un
99%. Es ese 1% restante es el que nos puede joder la vida.
Siempre es bueno colocar esta salvaguarda última para que nuestro programa no entre en una situación de bucle infinito sin salida posible. El Wachtdog es la solución. Si no es refrescado en el lapsus de tiempo que definimos reseteará el PIC y nuestro programa comenzará a ejecutarse de nuevo. La situación imponderable, no medible, inimaginable ha sido salvada y nuestra aplicación vuelve por sus fueros y comienza de nuevo a caminar.
Esto lleva a dos consideraciones:
1ª.- El Watchdog debe ser activado solo cuando hayamos alcanzado ese 99% de fiabilidad de nuestro programa.
En caso contrario nos va a ser muy difícil detectar nuestras propias inconsistencias e incongruencias, nuestros fallos de diseño, nuestra falta de imaginación (revivir en nuestra cabeza lo que debe estar ocurriendo en el núcleo del PIC) serán ocultados, enmascarados, diluidos por el funcionamiento del Watchdog.
Tenemos que poner todo nuestro empeño en que nuestro programa funcione
sin Watchdog. Cuando estemos seguros de ello podremos activarlo para prevenir aquello que no hemos sido capaces de prever. Prevenir lo imprevisto (curiosa frase)
2ª.- Una vez decididos a activar el Watchdog hay que ser muy precavidos (ó listos ó inteligentes ó despiertos ó cautos) sobre dónde colocar los refrescos del Watchdog.
Por un lado no podemos poner refrescos sin ton ni son, a tontas o a locas, en cualquier sitio porque nos parece bien, sin tener en cuenta su potencial riesgo de bucle sin salida.
En este caso el Watchdog no nos serviría de nada ya que si
acertamos a colocar el refresco justo dentro de un proceso realmente infinito y sin salida (es posible hacerlo: yo lo hice una vez y me dio dolores infinitos de cabeza) el bucle sería definitivamente infinito ya que al ser refrescado precisamente en él, nuestro Watchdog no nos sacaría nunca de él.
Por otro lado hay que prever lo contrario, cualquier proceso normal y válido de nuestro programa cuya duración supere (o pueda superar) el del vencimiento del Watchdog. Es de cajón darse cuenta de que en estos procesos potencialmente largos debe tenerse prevista la posibilidad de que se nos desborde el Watchdog y nos lo dejemos a medio realizar. Debemos por tanto colocar en él un refresco.
Un ejemplo típico y tópico de esto es cuando están involucrados procesos de comunicaciones en las que estamos esperando recibir algo que, por vaya usted a saber qué circunstancias, no nos llega.
Mi consejo final: No debemos abusar de los refrescos y hay que colocarlo/s en aquel/llos puntos en que se den las dos siguientes circunstancias:
a.- Si el programa pasa por allí es que todo va bien.
b.- Si el programa pasa por allí el Watchdog puede desbordar.
Yo usualmente empiezo por activarlo
sin refresco alguno y compruebo que efectivamente se resetea el PIC.
Después coloco
un solo refresco, en el punto de inicio o vuelta al bucle infinito normal de mi programa (En C sería justo detrás de mi while(true)) y compruebo si los distintos procesos "caben" en el tiempo de desborde.
Y por último coloco
un refresco en cada uno de los que se que consumen mas tiempo.
Con esta forma me aseguro de que he ajustado al mínimo indispensable los puntos de refresco con tal de que el Watchdog me sirva para algo en lo que realmente se me ha escapado y no he sido capaz de prever.
Así lo he vivido y así os lo he contado. Espero que os sirva.
Un saludo a todos.
Referencia:
¿Qué es el Watch Dog Timer? Evitando que se nos "cuelgue" nuestro PIC