Al final, simplemente no puede protegerse contra todos los fallos de memoria. Afortunadamente, estos son extremadamente raros a menos que su dispositivo vaya al espacio.
Usted puede, utilizando ciclos adicionales, protegerse de la corrupción en ciertas partes específicas de la memoria. Por ejemplo, podría guardar varias copias de una estructura de datos crítica, cada una con su propia suma de comprobación. Tendría que acceder a los datos en esta sección a través de subrutinas que actualizan las copias múltiples, calcular las sumas de comprobación y lidiar con las discrepancias.
Muchas de las cosas que se escuchan como estrategias, especialmente para lidiar con fallas en la memoria del programa, empeoran las cosas. Por ejemplo, si su código toma 1 kB, pero con la comprobación de errores toma 2 kB, acaba de duplicar la posibilidad de ser golpeado por un error aleatorio. Cualquiera que sea la comprobación que haga ahora tiene que superar eso solo para compensar. ¿Y cómo se comprueba el corrector? Como dije al principio, simplemente no puede protegerse contra todas las fallas.
Una estrategia más realista es minimizar la posibilidad de falla en primer lugar. Podría usar un microcontrolador antiguo con un tamaño de función más grande. Eso hace que sea menos probable que ciertos eventos puedan cambiar un poco. Los subsistemas de memoria externa pueden tener corrección y detección de errores, hasta cierto nivel de errores.
Si algo se invierte un poco en la ALU o en uno de los registros clave del procesador, se va a atornillar. En algunos casos un perro guardián puede ayudar. Cuando el código ya no borra el temporizador de vigilancia con regularidad, el procesador se reinicia y puedes volver a empezar.
Básicamente, si necesita una confiabilidad extra alta, se logrará mejor con múltiples sistemas redundantes a un nivel más alto que con trucos cutesey en un microcontrolador.