Недавно я узнал о сторожевых таймерах и пытаюсь реализовать их для моей схемы с целью сброса моего (AVR) микроконтроллера, если он зависает (то есть не отвечает на сторожевой таймер).
Основываясь на некоторых исследованиях, мне кажется, что существует около четырех вариантов:
- Подключите мой микроконтроллер с внешней выделенной микросхемой для сторожевого таймера .
- Подключите мой микроконтроллер с дополнительным микроконтроллером (какой-то очень простой, недорогой), последний закодирован для единственной цели - сторожевого таймера.
- Выложите мою собственную схему сторожевого таймера на 555 таймеров и подключите ее к моему микроконтроллеру.
- Используйте встроенный сторожевой таймер моего микроконтроллера.
,
Какой из вышеперечисленных подходов вы бы оценили выше и почему?
Я хотел бы установить время сторожевого режима примерно на 6 секунд, основываясь на определенных критериях, касающихся того, как я делаю остальную часть своего дизайна и кода (устройство будет работать от батареи с периодическим регистратором температуры).
Небольшое примечание : я бы предпочел вариант 1, для простоты, однако, исходя из пары, которую я нашел, эти части либо кажутся дорогими (я бы предпочел решение не более 1,25 доллара США), либо разрешали только меньше чем 2 секунды для периода времени сторожевого таймера.
источник
Ответы:
Мне нравится pjc50говорит 6 секунд это долго. Типичный микроконтроллер выполнит десятки миллионов инструкций за это время, и тогда многое может пойти не так. Предположим, вы управляете некоторой нагрузкой с помощью ШИМ, а низкий рабочий цикл 10% поддерживает низкое рассеивание. Микроконтроллер выходит из строя и выходной сигнал застревает на высоком уровне, рабочий цикл 100%. Нагрузка не нравится, и умирает. Вы не хотите ждать 6 секунд, чтобы это произошло. Там должна быть какая-то часть вашего кода, где вы проходите гораздо чаще. Основной цикл может составлять всего 10 мс, тогда вы можете, например, установить тайм-аут сторожа на 100 мс. Если вы пинаете собаку один раз каждые 10 мс, то тайм-аут означает, что вы пропустили ее 10 раз! Один раз, хорошо, но десять раз это катастрофа, и вы должны принять меры. Нагрузка будет отключена через 100 мс вместо 6 секунд,
источник
источник
Если ваша схема / устройство не управляет критически важным для жизни оборудованием, вы, вероятно, можете избежать использования внутреннего сторожевого таймера. В противном случае (или на самом деле, в любом случае) посмотрите эти две замечательные статьи от Джека Гэнсле:
http://www.ganssle.com/watchdogs.htm
http://www.ganssle.com/articles/watchdogsredux.htm
Между прочим, если вы не можете установить сторожевой таймер на длительный интервал, вы можете попробовать подходить к пробуждению достаточно часто, чтобы пнуть сторожевой таймер, но время от времени выполняете только полный цикл измерений / записи логов.
источник