Compilación de una aplicación para trabajar en condiciones de radiación intensa: protección contra fallos
Hola a todos. Estoy desarrollando un sistema embebido en C++ para un satélite espacial que operará en órbita terrestre baja. Allí el nivel de radiación es muy alto y, según entiendo, esto puede causar fallos en la memoria (bit flips) e incluso en los registros del procesador. Mi código en C++ se compila con GCC para ARM Cortex-M4.
El problema es que los métodos estándar de manejo de errores (try-catch, assert) no protegen contra fallos de hardware. Por ejemplo, si la radiación "invierte" un bit en una variable que almacena una bandera de estado importante, o en el propio código (en Flash), el programa puede comenzar a comportarse de manera impredecible. Ya me he encontrado con que a veces los cálculos dan resultados incorrectos, y otras veces el programa simplemente se congela o entra en HardFault.
Aquí hay un ejemplo simplificado de mi código, donde calculo la suma de verificación de la telemetría:
```cpp
#include
uint32_t calculate_checksum(const uint8_t* data, size_t len) {
uint32_t sum = 0;
for (size_t i = 0; i < len; ++i) {
sum += data[i]; /
```