La única forma en que podía pensar para implementar #1 es continuamente CRC el programa memoria en contra de un valor conocido, y si falla la comprobación CRC recuperar una copia del programa a partir de otra fuente. Hay muchas trampas para esto: la CRC almacenado valor podría quedar dañado de alguna manera, o puede ser que no exista "otra fuente" de su programa fácilmente disponibles para el usuario de la intervención puede ser necesaria. Asimismo, dado que la corrupción podría estar en cualquier lugar en la memoria de programa podría afectar el código CRC para que no se ejecute o el gestor de arranque por lo que no funcionará (usted puede ir tan lejos abajo el agujero del conejo como te gusta a este respecto).
Puede combinar la comprobación CRC con un temporizador de vigilancia externa o monitor de salud de tal forma que si el código CRC no se puede ejecutar o no producir el resultado correcto el microcontrolador se restablecerá y ejecutar un especial de recuperación del cargador de arranque en lugar de la aplicación. Lo que la recuperación del gestor de arranque haría depende de su aplicación: es de alguna manera podría alertar a los usuarios de que un nuevo programa de carga es necesaria o si ha diseñado para que el intento de recuperación de una copia prístina de su programa desde la memoria externa si está disponible. El mismo agujero del conejo como anteriormente se aplica: ¿cómo sabe usted que la memoria externa no ha sido dañado? O, si el CRC está dañado su programa sería correcto, pero siempre falla la verificación.
En algún punto de su dispositivo no puede manejar este tipo de error por sí mismo y, si usted quiere la cosa para seguir corriendo que tendrás que llevar un sistema de desarrollo y programador para traerlo de vuelta. Este tipo de esquema probablemente añadirá un par de 9 a su fiabilidad, aunque incluso si no es perfecto.