Счётчик аварийных перезагрузок всегда показывает ноль
Чтобы собирать статистику сбоев без записи во flash, завели глобальную переменную:
uint32_t crash_count;
void HardFault_Handler(void) {
crash_count++;
NVIC_SystemReset();
}
Питание не пропадает, RAM при программном сбросе физически сохраняется. Но после каждой перезагрузки crash_count равен нулю. Почему и как исправить?
- Startup обнуляет .bss; нужна секция без инициализации
- NVIC_SystemReset физически стирает всю RAM
- Переменной не хватает квалификатора volatile
- В HardFault запрещено изменять глобальные данные
