Compilação de aplicação para operar em condições de radiação intensa: proteção contra falhas
Olá a todos. Estou desenvolvendo um sistema embarcado em C++ para um satélite espacial que operará em órbita baixa da Terra. Lá, o nível de radiação é muito alto e, pelo que entendi, isso pode causar falhas na memória (bit flips) e até nos registradores da CPU. Meu código em C++ é compilado com GCC para ARM Cortex-M4.
O problema é que os métodos padrão de tratamento de erros (try-catch, assert) não protegem contra falhas de hardware. Por exemplo, se a radiação "inverter" um bit em uma variável que armazena uma flag de estado importante, ou no próprio código (na Flash), o programa pode começar a se comportar de forma imprevisível. Já enfrentei situações em que os cálculos produzem resultados incorretos, e outras em que o programa simplesmente trava ou entra em HardFault.
Aqui está um exemplo simplificado do meu código, onde calculo a soma de verificação da telemetria:
```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];
```