Я использую трюки в программировании для повышения надежности и
основано это всё на том, что при воздействии помех сбивается тот самый счетчик команд, а содержимое ОЗУ как правило остается целым.
На деле до счетчика команд дело не доходит, хороший супервизор питания сбрасывает контроллер и держит его в сбросе, пока помехи не закончатся.
Отсюда вывод - контроллер должен продолжать работу после сброса с той точки, где был до сброса.
Конечно же, такая задача практически недостижима, но к ней можно приблизиться, если софт построить на коротких циклах
main { for (;;) { function[state](); }}
переменная state __no_init
Прошел сброс - автоматом попадаем в то состояние, где были. Конечно же, еще и другие переменные нужно делать no_init, желательно контролировать их правдоподобие.
Конечно же, это решение "для бедных", применимо только в определенной нише сложность/стоимость.
Но испытания по электромагнитной совместимости прибор проходит.
P.S. Прошло 20 лет как топтался доктор Туамосец, а у меня до сих пор отторжение этой темы :)