Делаю не очень сложное устройство, которое должно, в идеале, работать месяцами без выключения и обслуживания. Возник вопрос. Зависания, от которых призван спасать вачдог возникают по какой причине, аппаратной или сугубо программной? Например, программа: сидим ждем нажатия кнопки, когда дождались включили свет и выключили через какое то время. Виснуть тут негде, в дебри функций она не уходит, может ли зависнуть по другой причине? Нужно ли включать вачдог, или он только для неопределенных ситуаций, в которые могут завести программные кущи? Кто на практике использовал эту штуку и часто ли она реально срабатывала?
Нафига во всех то? Я с аппаратным зависанием ни разу не сталкивался. А во все места программы сброс пихать, чисто на всякий случай, это та еще радость.
Интересно. А вы каждое зависание, с которым когда либо сталкивались, тщательно проверяли? Иначе я не понимаю, как вы можете такое утверждать. Ну а если хотите столкнуться, то сделайте i2c-мастер на ардуино, и случайно отключите слейва на секунду посреди пакета. Будет вам замечательное аппаратное зависание.
С программными зависаниями сталкивался, а вот с аппаратными... Вот так вот не могу вспомнить ни одного случая аппаратного зависания.
Если вся программа крутится в лупе, то возможно, причем быстренько. А если есть ответвления, ну там в настройки зайти, помигать лампочкой и прочее. Пихать придется везде.
Сама "проблема" есть в наличии, а "зависание"-то где в этом случае? Контроллер продолжить работать в соответствии с заложенной в него программой.
А заложенная в него программа ожидает, что аппаратная часть функционирует правильно. И не обрабатывает сбой, и зависает к чертям. Потому что она такая в ардуино.
Переиначу вопрос. В приведенном мною примере: опрос пинов и дрыгание другими пинами, возможно аппаратное зависание?
В общем случае -- да, возможно. Но скорее это будет зависание всего изделия, а не конкретного МК. И wdt в этом случае может быть бесполезен.
бессмысленно. В младших AVR у WDT нет оконного режима. Это немного осложняет подход, но не ставит крест. Во всех критических местах необходимо расставить флаги. WDT сбрасывать только после того, как все флаги сброшены, затем их снова взвести. Т.к. нет окна, то в секциях с конечным временем выполнения (тот же обмен по I2C) необходимо контролировать время.
причина ресета лежит в регистре MCUSR. Мигание светодиодом не зависнет никогда. У меня WDT использовался как будильник в метеодатчике. За полтора года ни одного зависания, хотя он тупо лежат на балконе (под снегом и каплями дождя.).
Конечно. Аппаратных проблем вообще не бывает, если вас всех послушать. Кондесаторы в блоке питания не вздуваются. Космическое излучение не переворачиват биты. Импульсы в электросети? Нет, не слышал. Светодиоды служат вечность, кстати говоря. Миграции электронов в транзисторах тоже не бывает.