Hola a todos los combatientes fervorosos del ruido mediante ejercitos de unos y ceros

. He visto muchas ideas interesantes aqui, de las cuales he tomado algunas en conjuncion con un poco de creatividad para crear lo que hoy utilizo como un modelo de programa que hasta ahora ha soportado condiciones industriales que yo considero casi espantosas.
Lo que yo utilizo basicamente es el modelo de flags y checkpoints, expuesto en alguna ocasión por Azicuetano, que permite que el programa se ejecute en un orden totalmente predecible, he complicado un poco los checkpoints y los flags para hacer posible la ejecución de mis programas, pero si que el esfuerzo ha valido la pena. La verificación de estos marcadores de seguridad como yo les digo puede tener dos efectos cuando se detecta que el programa no esta haciendo lo correcto: uno es el reseteo completo del microcontrolador por un bucle que me termina reiniciando el WDT, que generalmente lo produzco para errores criticos o bien en la etapa de carga inicial donde no pierdo nada con volver a empezar de nuevo. El segundo es generar un reinicio rapido donde el programa se realinea con el ultimo paso que hizo correctamente y asi el programa continua en forma normal sin necesidad de sacrificar el proceso que estamos realizando, de tal forma si el error es solo un salto a una instruccion incorrecta el programa se ajusta solo y uno no se da cuenta de lo que ha ocurrido, salvo porque mantengo un registro en memoria de los errores que se producen. Otra herramienta fundamental es tener el WDT bien justo por si el programa salta a una dirección de memoria vacia. Por ultimo utilizo una función creada por mi (Antes usaba la función restart_cause() del CCS pero a mi parecer tiene ciertas incontingencias para detectar que tipo de arranque se habia producido) que me permite realizar una accion diferente de carga para cada tipo de arranque del PIC en cuestión.
Lamentablemente sin el WDT esto no funciona pero siempre me las he arreglado para dejar el TMR0 disponible para el WDT, creando temporizadores simultaneos para un mismo TIMER, ocupa memoria si, pero este sacrificio de bytes es minusculo y me deja el WDT disponible.
Creo que ustedes estan tratando de hilar mas fino en el asunto (realmente son toda una tropa de expertos en el asunto) y la verdad es que ahora no tengo mucho tiempo para poder colgar un programa y que vean como organizo el código, asi que no se si mi opinión les servirá de mucha ayuda. Además mis programas los realizo en C, no estoy muy instruido en el Assembler que creo que es la clave para lograr inmunidad casi absoluta al ruido.
Saludos a todos.