делаю так: есть "спецрегистр" ячейка памяти флагов (соотвественно 8 бит) и сервис вачдога (по
системному таймеру) в котором проверяются и сбрасываются все 8 бит,
которые на момент проверки должны быть все установлены.
Устанавливаются они в разных, критически важных ветках программы.
Если какой-то бит не установлен, то активизируется "собака". Ничто
не мешает по каким-то флагам запускать и другие аварийные
процедуры, к примеру сохранение чего-нибудь в EEPROMе и т.п.
В для сохранения контента (чтобы. к примеру обходить штатную процедуру очистки памяти при старте, делаю анализ причин сброса по регистру флагов процессора (там можно понять по включении питания был сброс или по "собаке", к примеру