Watchdog timer что это
Перейти к содержимому

Watchdog timer что это

  • автор:

Сторожевой таймер | WatchDog Timer (Trema-модуль v2.0)

Trema-модуль Сторожевой таймер — это модуль позволяющий контролировать «зависание» Arduino. Если Arduino «зависнет» то Trema-модуль её перезагрузит как при нажатии кнопки «reset».

Сторожевые таймеры также называют WDT (WatchDog Timer — сторожевой пёс).

Видео:

Подключение:

  • Вход модуля S (Signal) подключается к любому выводу Arduino (нужен для сброса таймера).
    Если к Arduino в Вашем устройстве подключён модуль получающий данные от Arduino, не реже тайм-аута сторожевого таймера, то его вход S (Signal) можно подключить к Arduino вместе со входом этого модуля. Например, если Вы выводите данные в LCD дисплей по шине I2C, то вход S (Signal) сторожевого таймера можно подключить к выводу SDA или SCL этой шины. При таком подключении отпадает необходимость в написании кода для сброса таймера и не используется отдельный вывод для его работы.
  • Выход модуля RES (Reset) подключается к выводу RESET Arduino (нужен для перезагрузки Arduino).

Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Питание:

  • Напряжение питания 5 В постоянного тока подаётся на выводы V (Vcc) и G (GND) модуля.

Подробнее о модуле:

В программе Arduino нужно прописать код который будет сбрасывать Trema-модуль сторожевой таймер, подавая импульсы на его вход S (Signal). Пока таймер постоянно сбрасывается, программа (устройство, Arduino) работает нормально. Если сторожевой таймер перестал получать импульсы сброса (пауза между импульсами превысила Тайм-аут таймера), то он «решает» что Arduino «зависла» и формирует импульс логического «0» на своём выходе RES (Reset) который должен быть подключён к выводу RESET Arduino.

На вход S (Signal) сторожевого таймера можно подавать любые импульсы (положительные или отрицательные). Импульс перезагрузки на выходе RES (Reset) сторожевого таймера формируется при паузе между импульсами на входе S (Signal) больше чем Тайм-аут, не зависимо от логического уровня на входе S (Signal).

Trema-модуль сторожевой таймер аппаратно сбрасывается (вне зависимости от состояний на его входе) при нажатии на кнопку Arduino RESET и при старте загрузки скетчей. Следовательно, Trema сторожевой таймер не требуется отключать от Arduino во время загрузки скетчей, они успеют загрузиться и выполнить сброс таймера до формирования импульса перезагрузки на его выходе.

Примеры:

Код для «зависания» Arduino:

const uint8_t pinVD = LED_BUILTIN; // Определяем константу с указанием № вывода Arduino к которому подключён светодиод (используется светодиод на плате Arduino) const uint8_t pinWDT = 5; // Определяем константу с указанием № вывода Arduino к которому подключён вход S сторожевого таймера (можно использовать любой вывод Arduino) // void setup(void) < // pinMode (pinVD, OUTPUT); // Конфигурируем вывод подключённый к светодиоду как выход pinMode (pinWDT, OUTPUT); // Конфигурируем вывод подключённый к сторожевому таймеру как выход digitalWrite(pinVD, LOW); // Устанавливаем 0 на входе светодиода (выключаем светодиод) digitalWrite(pinWDT, LOW); // Устанавливаем 0 на входе таймера (далее будем подавать положительные импульсы для его сброса) >// // void loop(void) < // if(millis()%1000<10)< // Выполняем код оператора if каждые первые 10 мс новой секунды digitalWrite(pinWDT, HIGH); // Формируем импульс на входе сторожевого таймера digitalWrite(pinWDT, LOW); // Завершаем импульс на входе сторожевого таймера digitalWrite(pinVD, digitalRead(pinVD)^1); // Меняем состояние светодиода (если он был включён, то выключаем и наоборот) delay(11); // Ждём 11 мс чтоб не выполнять код оператора if более одного раза в секунду memset(malloc(100), 5, 10); // Пытаемся «зависнуть» >>
  • В начале кода (до функции setup) определяются выводы к которым подключён светодиод и вход Trema сторожевого таймера.
  • В коде setup() определённые ранее выводы переводятся в режим выхода и на них устанавливается уровень логического «0» (LOW).
  • В коде loop() все функции находятся в теле оператора if и выполняются только если его условие верно.
    • Условие (millis()%1000 <10) будет верно в течении 10 мс в начале каждой секунды (1000 мс) с начала старта скетча, то есть в промежутки времени: 0. 10 мс, 1000. 1010 мс, 2000. 2010 мс, 3000. 3010 мс и т.д.
    • Первые две функции digitalWrite() формируют положительный импульс на входе Trema сторожевого таймера (устанавливая высокий логический уровень и сразу сбрасывая его в низкий логический уровень)
    • Следующая строка digitalWrite(pinVD, digitalRead(pinVD)^1) считывает установленный ранее логический уровень вывода светодиода и меняет его на противоположный
    • Далее следует задержка delay(11) чтоб все функции в теле оператора if выполнялись только 1 раз в секунду. Если вход в тело оператора if произошел спустя 1001 мс после старта скетча, то после задержки в 11 мс будет 1012 мс, что не попадает под условие оператора if до начала следующей секунды.
    • И последняя строка memset(malloc(100), 5, 10) пытается «зависнуть», делается это так:
      • Функция malloc(100) выделяет область памяти ОЗУ размером в 100 байт, но так как мы не освобождаем эту область функцией free(), то память в «куче» ОЗУ скоро заполнится.
      • Функция memset(адрес, 5, 10) записывает значение 5 в 10 байт начиная с адреса возвращённого функцией malloc(100).
      • Как только память «кучи» ОЗУ заполнится, функция malloc(100) откажется выделять новую область памяти размером 100 байт и вернёт 0.
      • Но функция memset(адрес, 5, 10) воспримет этот 0 как адрес начиная с которого запишет десять пятёрок, что и приведёт к «зависанию» (вместо значения 5 можно записывать другие значения).
      • В качестве параметра функции malloc() вместо 100 можно указать любое другое число, чем оно будет больше, тем быстрее закончится память «кучи» ОЗУ и быстрее произойдёт «зависание».

      В результате светодиод будет мигать несколько секунд пока не «зависнет» Arduino. Так как Arduino «висит», она не отправляет команды ни светодиоду, ни сторожевому таймеру, следовательно, сторожевой таймер не сбрасывается. По истечении тайм-аута сторожевой таймер сформирует отрицательный импульс на выходе RES который подключён к выводу RESET Arduino, что приведёт к её перезагрузке. После перезагрузки светодиод опять начнёт мигать пока Arduino снова не «зависнет». Если исключить сторожевой таймер из схемы, то Arduino после «зависания» не перезагрузится, пока мы не нажмём на кнопку RESET или не отключим питание.

      Примечание:

      Так как в рассматриваемой схеме Arduino меняет состояние светодиода каждую секунду (пока она не «зависнет»), что ниже времени тайм-аута сторожевого таймера, то вход S (Signal) сторожевого таймера можно подключить вместе со светодиодом к выводу pinVD, исключив из скетча все строки в которых встречается константа pinWDT. Таким образом мы избавляемся от необходимости выделения отдельного вывода под сторожевой таймер, и от необходимости написания для него дополнительно кода.

      Применение:

      • В качестве альтернативы WDT интегрированного в Arduino, в отличии от которого, для работы Trema WDT не требуется прошивать новый bootloader (загрузчик). Или в случаях когда тайм-аут WDT должен превышать предельное время в 8 сек. для интегрированного в Arduino.
      • Для контроля «зависаний» микроконтроллеров без WDT.
      • Для контроля «зависаний» иных модулей подключаемых к Arduino, которым для возобновления работы достаточно вновь получить данные инициализации от Arduino.

      Ссылки:

      Сторожевой таймер

      Сторожевой таймер (контрольный таймер, англ. Watchdog timer ) — аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).

      Физически сторожевой таймер может быть:

      • Самостоятельным устройством.
      • Компонентом устройства, например, микросхемой на материнской плате.
      • Частью кристалла SoC.

      Автоматизированные системы, не использующие оператора-человека, хотя тоже подвержены ошибкам, зависаниям и другим сбоям (в том числе аппаратным), с использованием сторожевых таймеров увеличивают стабильность работы — нет необходимости ручного сброса. Поэтому наиболее частое их использование — встроенные системы различного назначения.

      Область применения

      Контроль работы аппаратно-программных комплексов на основе ЭВМ

      Такие таймеры позволяют не только отслеживать зависание операционной системы (и перезагружать её), но и отслеживать состояние отдельных программ и компонентов аппаратного обеспечения системы в целом, а также осуществлять проверку подключения ЭВМ к компьютерной сети.

      Подобные таймеры используются, например, в банкоматах и терминалах по приему платежей.

      Управление устройствами измерительной техники

      В этом случае сторожевой таймер может использоваться как средство для отсчета временных интервалов, необходимых для осуществления периодических измерений.

      См. также

      Ссылки

      • Watchdog своими руками, Guido Socher
      • Micro Watchdog timer на микроконтроллере PIC16F630 для PC

      Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
      Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
      Эта отметка установлена 14 мая 2011.

      Примечания

      • Встраиваемые решения
      • Компьютерное аппаратное обеспечение

      Wikimedia Foundation . 2010 .

      • Матвиенко, Нина Митрофановна
      • WDT

      Полезное

      Смотреть что такое «Сторожевой таймер» в других словарях:

      • Сторожевой — Сторожевой: Содержание 1 Подклассы кораблей 2 Корабли 3 Другое 4 См. также … Википедия
      • контрольный таймер — сторожевой таймер — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы сторожевой таймер EN watchdog timer … Справочник технического переводчика
      • WDT — Сторожевой таймер (контрольный таймер, англ. Watchdog timer) аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение… … Википедия
      • Watchdog timer — Сторожевой таймер (контрольный таймер, англ. Watchdog timer) аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение… … Википедия
      • Watchdog — Сторожевой таймер (контрольный таймер, англ. Watchdog timer) аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение… … Википедия
      • Вотчдог — Сторожевой таймер (контрольный таймер, англ. Watchdog timer) аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение… … Википедия
      • Вочдог — Сторожевой таймер (контрольный таймер, англ. Watchdog timer) аппаратно реализованная схема контроля за зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение… … Википедия
      • HDCP — Не следует путать с DHCP. У этого термина существуют и другие значения, см. HD. Работа с оптическими дисками Оптический диск Образ оптического диска, ISO образ Эмулятор оптических дисководов Программное обеспечение для работы с файловыми… … Википедия
      • PIC 16F876 — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка… … Википедия
      • Платёжный терминал — Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами написания статей … Википедия
      • Обратная связь: Техподдержка, Реклама на сайте
      • �� Путешествия

      Экспорт словарей на сайты, сделанные на PHP,
      WordPress, MODx.

      • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
      • Искать во всех словарях
      • Искать в переводах
      • Искать в ИнтернетеИскать в этой же категории

      Watchdog Timer

      В Контакте Ютуб Почта

      Слово Watchdog можно перевести как “сторожевая собака”. Применительно к микроконтроллерам Watchdog Timer — это сторожевой таймер.

      Сторожевой таймер нужен для того, чтобы перезагружать микроконтроллер, если он наглухо зависает. При такой перезагрузке могут быть потеряны какие-то промежуточные вычисления (впрочем, при зависании это неизбежно), но зато ваша система не встанет и устройство продолжит работу после перезагрузки.

      Микроконтроллер ATtiny13A имеет улучшенный сторожевой таймер (WDT). WDT представляет собой таймер, отсчитывающий циклы отдельного встроенного генератора 128 кГц. WDT выдает прерывание или сброс системы, когда счетчик достигает заданного значения тайм-аута. В обычном режиме работы требуется, чтобы система использовала WDR — Watchdog Timer Reset — команду сброса счетчика при достижении значения тайм-аута. Если система зависла, то она не перезапустит счётчик, и тогда будет выдано прерывание или сброс системы.

      Watchdog Timer

      В режиме прерывания WDT выдает прерывание по истечении времени таймера. Это прерывание может использоваться для вывода устройства из спящего режима, а также в качестве общего системного таймера.

      Одним из примеров является ограничение максимального времени, разрешенного для определенных операций, то есть прерывание выполняется, если операция выполняется дольше, чем ожидалось.

      В режиме сброса системы WDT выполняет сброс по истечении времени таймера. Обычно это используется для предотвращения зависания системы в случае сбоя в программе.

      Третий режим, режим прерывания и сброса системы, объединяет два других режима, сначала предоставляя прерывание, а затем переключаясь в режим сброса системы. Этот режим, например, позволит безопасно завершить работу, сохранив критические параметры перед сбросом системы.

      Сторожевой таймер всегда включен фуз-битом (WDTON). Если фуз-бит установлен, то он переведет сторожевой таймер в режим сброса системы. При установленном фуз-бите, бит режима сброса системы (WIDE) и бит режима прерывания (WDTIE) устанавливаются в 1 и 0 соответственно. Для дальнейшего обеспечения безопасности программы изменения в настройке сторожевого таймера должны выполняться в соответствии с установленной очерёдностью. Последовательность действий очистки WDE и изменения конфигурации тайм-аута выглядит следующим образом:

      1. В одной и той же операции запишите логическую единицу для изменения состояния сторожевого таймера, изменив бит включения (WDCE) и WADE. Логическая единица должна быть записана в WDE независимо от предыдущего значения бита WDE.
      2. В течение следующих четырех тактов запишите биты WDE и предварительного делителя частоты (Watchdog prescaler — WDP) по желанию, но с очищенным битом WDCE. Это должно быть сделано за одну операцию.

      В следующем примере показан код на ассемблере и C для отключения сторожевого таймера. В примере предполагается, что прерывания контролируются (например, путем глобального отключения прерываний), чтобы во время выполнения этих функций не возникало прерываний.

      Ассемблер

      WDT_off: ; Отключить глобальные прерывания cli ; Сбросить Watchdog Timer wdr ; Очистить WDRF в MCUSR in r16, MCUSR andi r16, (0xff - (1<
      

      Си

      void WDT_off(void) < __disable_interrupt(); __watchdog_reset(); /* Очистить WDRF в MCUSR */ MCUSR &= ~(1<

      Если сторожевой таймер случайно включен, например, из-за утечки памяти или при сработке детектора напряжения, устройство будет сброшено, а сторожевой таймер останется включенным. Если код не настроен для обработки событий сторожевого таймера, это может привести к бесконечному циклу сброса тайм-аута. Чтобы избежать этой ситуации, прикладное программное обеспечение всегда должно сбрасывать флаг сброса системы сторожевого таймера (WDRF) и бит управления WDE в процедуре инициализации, даже если сторожевой таймер не используется.

      В следующем примере показан код на ассемблере и C для изменения значения тайм-аута сторожевого таймера.

      Ассемблер

      WDT_Prescaler_Change: ; Отключить глобальные прерывания cli ; Сбросить сторожевой таймер wdr ; Запустить временную последовательность in r16, WDTCR ori r16, (1<
      

      Си

      void WDT_Prescaler_Change(void) < __disable_interrupt(); __watchdog_reset(); /* Запустить временную последовательность */ WDTCR |= (1<Сторожевой таймер должен быть сброшен перед любым изменением битов WDP, поскольку изменение битов WDP может привести к тайм-ауту при переключении на более короткий период ожидания.

      Аппаратный «watchdog» или незаменимый помощник в борьбе с зависанием

      В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.

      В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.

      Данное устройство имеет следующие возможности:

      1. Имитация нажатия кнопок POWER и RESET;
      2. Управление питанием USB-устройством (при условии, что у него нет отдельного источника);
      3. Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;
      4. Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).

      Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.

      Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).
      Обмен информацией аналогичен консольному.

      команда Описание Пример
      help Краткая справка по командам help
      LED1 Управление светодиодом, по умолчанию выключен LED1 ON
      LED1 OFF
      RELAY Управление реле, по умолчанию включено RELAY ON
      RELAY OFF
      KEY1 Имитация нажатия кнопки 1, по умолчанию не нажата KEY1 ON
      KEY1 OFF
      KEY2 Имитация нажатия кнопки 2, по умолчанию не нажата KEY2 ON
      KEY2 OFF
      C1 Управление таймером 1, связанным с кнопкой 1.
      Установка времени в секундах, максимальное значение 32767.
      Для отключения функции таймера, необходимо задать время равное 0.
      C1 RES
      C1 SET 60
      C1 SET 0
      C2 Управление таймером 2, связанным с кнопкой 2.
      Установка времени в секундах, максимальное значение 32767.
      Для отключения функции таймера, необходимо задать время равное 0.
      C2 RES
      C2 SET 60
      C2 SET 0
      USB Управление питанием USB, по умолчанию включено USB ON
      USB OFF

      В случае удачного выполнения команды возвращает «OK».
      В случае некорректных данных возвращает «ERROR».
      Признаком конца строки служит символ возврата каретки «\r». Также поддерживается режим «\r\n».

      Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).

      Вот и все — просто и сердито =).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *