maik-vs (30.08.2012 12:45, просмотров: 189) ответил Andrey256 на Сейчас, функция резетит wdt только если программа заходила в прерывания и основной цикл. При сбое ОЗУ в programm counter может попасть код, где wdt вообще выключается? Т.е. можно защитить выключение и сброс wdt набором флажков и заработает?
Смотря что хранится в ОЗУ. Если стек программы то да, программный счётчик может получить любое значение. Против этого предусмотрен бит WDTOE: вероятность того, что 4 взятых наугад байта образуют команды "sbi WDTCR,WDE sbi WDTCR,WDTOE" ничтожно мала. Такой команды - запретить ватчдог - зачастую просто нет в программе!
Флаги для сброса (не запрета работы, бит wde, а сброса счётчика, команда wdr) имелись в виду вот какие. Обычно сброс делается в основном цикле. Цикл крутится, в подпрограммах не зависает, всё нормально. Но может быть, что какая-то ветка цикла выполняется неправильно, хотя и быстро. Так она должна устанавливать флаг "ошибки нет". Проходим цикл, смотрим на флаги, сбрасываем ватчдога. Нет - не сбрасываем, он нас сбросит :)