Maunix yo creo que si se podria hacer. Unicamente habria que configurar la maquina para que cuando hiciese el reset, guardase todo el estado de maquina en una parte de la eeprom, y cuando reinicie la maquina lo primero que haga es ir a mirar este sector de memoria y volver a ponerlo todo como estaba antes del reset. Pienso que se podria hacer. Ademas, los pics no tienen un bit que indica si el estado anterior es un reset ,no? Creo recordar que si. Habia un registro o un bit que avisaba si la maquina arrancaba de un estado anterior reset o power down.
La solucion con el WDT no me acaba de convencer. Soy muy reacio a utilizar el WDT para hacer nada. Prefiero deshabilitarlo, y montar aparte un sistema interruptivo donde no se me pare la maquina y haga saltar el WDT por accidente.
La verdad es que nunca he hecho un reset por software. Supongo que puede tener utilidad en aplicaciones de comunicaciones entre micros.
Deimos, creo que no has leído mi post detenidamente.
¿En qué momento he dicho que no se puede?
Todo lo contrario, he dicho que hay muchas formas pero también que hay formas "peligrosas" de hacerlo y que a la larga llevarán a un cuelgue del software (si el stack de call's está lleno).
El watchdog está para ser usado como watchdog, nada que hagas con una interrupción por software, un timer o lo que sea lo suplanta.
Si uno usa el watchdog para "solucionar bugs de software" bueno, es que es un uso del mismo para el cual no fue diseñado. Un software que está bien organizado no se va a perder así porque sí. En ese punto una rutina como la que tu haces es perfectamente válida, pero de nuevo, si está todo bien... para que resetearlo.
El watchdog sí sirve y no es un capricho. De hecho su timer es de solo lectura y una vez activado no podemos hacer nada más que detenerlo.
Lo de guardar en la eeprom para luego retomar donde se estaba, no es mala idea, pero me parece que no es de lo que se estaba hablando.
1) Si uno sabe donde 'estaba' entonces para que resetearse...
2) Si uno sabe que debe reiniciar una rutina, porque no hacer un goto y listo antes que reiniciar el software...
3) Si uno antes de resetearse va a guardar todo en la eeprom, lo cual lleva unos cuantos mseg, eso es totalmente inaceptable para muchas aplicaciones.
El uso del watchdog no es para cualquier aplicación y hay que saber 'domar a la bestia'. Cuando se activa el mismo es como si todo comenzase de nuevo para el pic, pero oh casualidad, tal vez se habia iniciado algún proceso importante que deba ser 'retomado'. Para ello uno puede ir haciendo eso que tu dices , durante el programa, pero el watchdog no avisa
que ocurrirá, simplemente ocurre.
Creo que es un tema super interesante y "aplicación dependiente", pero nos estamos yendo del hilo que originó el tema.
Saludos
PD: sí existe manera de saber qué reinició a un PIC, hay registros con información para ello.