Watchdog таймер что это

Что такое WatchDog и для чего он нужен

Watchdog таймер что это. hwg watchdog. Watchdog таймер что это фото. Watchdog таймер что это-hwg watchdog. картинка Watchdog таймер что это. картинка hwg watchdog

Не секрет, что высокие технологии в настоящее время охватывают все новые и новые сферы жизни человека. Еще в середине прошлого века трудно было себе представить тот рывок, который техника совершила за последние 20 лет.
Сегодня никого не удивить электронными терминалами по приему платежей, банкоматами, комплексами бытовой автоматики («Умный дом»), сложными автономными системами видеонаблюдения и т.п.
Список можно продолжать бесконечно долго, и все равно невозможно охватить сразу все области интеграции сложной электронно-вычислительной техники в современном обществе. Эти технологии делают нашу жизнь проще, комфортнее и, несомненно, гораздо интереснее.
К сожалению, несмотря на стремление к технологическому совершенству, создать что-либо совершенно надежное невозможно в силу объективных причин. Человек по природе своей несовершенен, следовательно, и созданные им приспособления не всегда действуют так, как хотелось бы. Это касается абсолютно любой сферы деятельности, включая сложнейшие стратегические комплексы и космическую отрасль.
Ведь не секрет, что чем сложнее устройство, чем больше элементов оно в себе содержит, тем выше риск возникновения непредвиденного сбоя. И дело здесь вовсе не в нежелании инженеров и программистов получить безупречный результат – просто невозможно предусмотреть абсолютно все ситуации.
Да и, кроме того, есть целый ряд причин, защиты от которых просто может не быть, либо она будет неэффективна. Никто не застрахован от внезапных перепадов напряжения питания, даже, несмотря на целый комплекс защитных устройств на этот случай, от случайных статических разрядов, от умышленных вредоносных действий недоброжелателей (например, хакерские атаки на сервера в интернете). Последствия таких событий, наверное, известны всем.

На практике, попав во внештатную ситуацию, оборудование ведет себя малопредсказуемо – происходят различные сбои, устройство «зависает», начинает «глючить», одним словом перестает корректно выполнять свои функции. Инженеры и программисты постоянно борются с подобными явлениями, регулярно обновляя программное обеспечение своих продуктов и совершенствуя их аппаратную часть. Но одно дело, когда «завис» или показал «синий экран смерти» домашний компьютер или ноутбук, и совсем другое дело – когда перестал функционировать тот же банкомат, подстанция сотовой связи, мощный сервер в центре обработки данных или сетевая камера видеонаблюдения.
В первом случае все решается простым нажатием кнопки «Сброс» или кратковременным выключением прибора из сети, а со вторым случаем все сложнее. А что, если тот самый банкомат или видеокамера находятся за многие сотни или даже тысячи километров от администратора системы?
Выход напрашивается сам собой – приставить к каждому устройству персонального смотрителя, который будет неустанно следить за его работоспособностью и вовремя нажимать нужные кнопки в случае сбоя. Но не все так просто.
Во-первых, не стоит забывать о пресловутом «человеческом факторе», как мы уже говорили человек – существо несовершенное, может и отлучиться куда-нибудь, отвлечься или просто заснуть на посту.
Во-вторых, порой, финансовые затраты на персонального сторожа для каждого устройства будут обходиться гораздо дороже самого этого устройства, что весьма расточительно, а в комплексе с первым утверждением вообще малоэффективно.

Есть еще способ. Практически во все современные устройства, работающие под управлением контроллера (процессора) и содержащие управляющую микропрограмму или операционную систему, встраиваются т.н. «Сторожевые таймеры» (англ. WatchDog – Сторожевой Пёс).
По своей сути они могут быть как программными, так и аппаратными, встроенными в микроконтроллер или иную микросхему внутри устройства.
Основная задача таких таймеров – своевременный перезапуск «зависшего» оборудования с целью восстановления его работоспособности.
Если в течение определенного времени или определенного в программе числа циклов операционная система устройства или порт микроконтроллера не отвечают на запросы таймера, устройству посылается команда сброса и перезагрузки.

Несомненно, это весьма удобно и не требует таких больших затрат, как содержание штата сотрудников, следящих за каждым прибором, но и тут есть большой минус. Те сторожевые таймеры, про которые велась речь выше – встроены непосредственно в логику контролируемого прибора. И в этом их основной недостаток. При определенных условиях эти таймеры, независимо от того, аппаратно они реализованы или программно, могут «зависнуть» вместе со всем устройством. И тогда польза такого электронного сторожа будет нулевой – его самого придется сбрасывать вместе со всей начинкой подконтрольного прибора.

Есть еще одно условие – иногда подачи только сигнала «Сброс» оказывается недостаточно, и для полного восстановления работоспособности устройства его необходимо на некоторое время полностью обесточить. Например, если по какой-то причине сработала защита встроенного в сетевую видеокамеру преобразователя питания? Устройство просто выключится, и сторожевой таймер тоже, следовательно, выходом из положения будет только кратковременное прекращение подачи напряжения питания на камеру с дальнейшим его восстановлением.

Итак, каким же должен быть оптимальный WatchDog?
Он должен быть независимым от контролируемого устройства, автономным, надежным, гибко программируемым и, самое главное, с возможностью дистанционного управления для того, чтобы оператор или администратор имели возможность при малейшем подозрении на неправильную работу контролируемого оборудования принять меры по исправлению ситуации. Так есть ли оптимальное решение? Конечно же, есть.

Вот список всех методов определения работоспособности оборудования, используемых в сторожевых таймерах HW group:

Ping Push: В этом режиме IP WatchDog через определенные интервалы времени отправляет на заданный IP-адрес запросы PING, тем самым определяя, откликается ли на них контролируемое устройство. В случае, если отклик от устройства не был получен, сработают контакты реле и, к примеру, будет произведена его перезагрузка. Данный метод очень удобен для мониторинга состояния сетевых видеокамер, маршрутизаторов, сетевых коммутаторов и т.п.

Ping Request: В отличии от предыдущего режима, IP WatchDog не посылает запросы PING, а ожидает таковых от контролируемого устройства. Хорошо подходит для использования в серверных и телекоммуникационных стойках, на вышках сотовой связи.

Web Push: Эта функция доступна только для IP WatchDog HWg-WR02a. Ее суть заключается в том, что сторожевой таймер периодически запрашивает определенную Web-страницу с указанного пользователем адреса. Это очень удобный метод контроля работоспособности Web-серверов – при отсутствии или недоступности запрашиваемой страницы (известная всем «Ошибка 404») сервер будет своевременно перезапущен.

Web Request: В данном режиме IP WatchDog ожидает от контролируемого устройства запроса своей внутренней Web-страницы. Если страница не будет запрошена в течение определяемого пользователем интервала времени – устройство будет перезапущено. Метод так же удобен для контроля состояния Web-серверов. Доступна эта функция только в обновленном IP WatchDog HWg-WR02a.
RS232 Rx: Как уже упоминалось выше, в этом режиме сторожевой таймер будет ожидать от подключенного к нему устройства определенную последовательность символов, переданную посредством стандартного порта RS-232.

Источник

AVR Урок 53. Watchdog Timer (WDT). Часть 1

Уже более года мною не публиковалось уроков по контроллерам AVR. На это были различного рода причины.

Во-первых, я считал, что основные виды периферии и прочих составляющих данного контроллера нами уже изучены.

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

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

Несмотря на это, я всё же, взвесив все «за» и «против», всё же решил ещё раз попытать счастья и выложить пару уроков (пока пару, а там посмотрим, как дело пойдёт) по данным микроконтроллерам.

Что же всё-таки сподвигло меня на данный шаг?

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

Во-вторых, новый хозяин данного семейства контроллеров Microchip, включил эти контроллеры в свою среду разработки MPLAB X, что позволит нам теперь обойтись сразу на два семейства одной средой разработки.

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

И вот одним из неизведанных ещё нами модулей оказался модуль Watchdog Timer (WDT), который, как оказалось, много где используется и выполняет очень важные роли в работе программ. Тем более, меня ранее многие просили сделать по нему урок, но я либо недопонимал ценность данной периферии, либо был увлечён чем-то другим.

Вот и настало время наконец-то восполнить данный пробел.

Watchdog Timer (WDT) – это сторожевой таймер (а если перевести дословно, «сторожевой пёс»), который представляет собой аппаратно-реализованную схему контроля над зависанием системы. Это таймер, который периодически сбрасывается контролируемой системой. Если вдруг сброса не произошло за определённый интервал времени после предыдущего сброса данного таймера, то происходит принудительная перезагрузка системы (в нашем случае микроконтроллера).

В каких конкретных случаях мы можем применить данный таймер?

Например, мы ждём ответа от какой-нибудь шины (например I2C или ещё какой-то) в виде отслеживания состояния определённого бита регистра. И вдруг произойдёт кратковременное отсоединение провода этой шины. После этого скорей всего произойдёт зависание программы, так как в шине будет сбой, и даже если что-то после и придёт от присоединённого узла, то мы вряд ли уже это отследим изменением состояния бита. Желательно, чтобы после какого-то таймаута система перезагрузилась. Тут-то и приходит нам на помощь WDT, который установлен на определённый интервал. Команду на перезагрузку сторожевого таймера мы расположим в нашем коде после того, как мы дождёмся отклика от шины. А если мы так его и не дождёмся, то мы не дойдём до команды перезагрузки WDT и через заветный интервал времени система будет перезагружена. После этого произойдёт заново инициализация шины и всё будет опять работать нормально.

Понятно, что данная ситуация подходит только для случая, когда нам приходится не слишком долго ждать отклика от устройств, то есть именно тогда, когда у нас существует какой-то непрерывный процесс, в котором есть возможность ситуации сбоя. Таких примеров можно придумать много, поэтому Watchdog Timer очень много где применяется.

При работе с таймером в нашем коде мы не будем напрямую работать с его регистрами, так как там ещё надо проделывать очень много различных подготовительных мероприятий. Для этого существует отличная библиотека wdt.h, которая находится в стандартном комплекте для AVR и не требует дополнительного подключения откуда-то. Но тем не менее о том, как именно устроен сторожевой таймер в контроллере ATMega328, которым мы и будем сегодня пользоваться, мы всё же поговорим.

Таймер питается от отдельного генератора, который вместе с ним входит в логику перезагрузки контроллера

Watchdog таймер что это. avr053img00. Watchdog таймер что это фото. Watchdog таймер что это-avr053img00. картинка Watchdog таймер что это. картинка avr053img00

А вот это диаграмма сброса контроллера по истечении интервала времени

Watchdog таймер что это. avr053img01. Watchdog таймер что это фото. Watchdog таймер что это-avr053img01. картинка Watchdog таймер что это. картинка avr053img01

Кроме того, что мы можем сбросить сторожевой таймер где-то в коде, мы можем также и отследить окончание интервала времени по прерыванию, которое надо включить отдельно.

WDT, как и было указано выше, работает от отдельного генератора.

Также следует отметить, что диапазон интервалов данного таймера не бесконечен.

Давайте посмотрим блок-схему WDT

Watchdog таймер что это. avr053img02. Watchdog таймер что это фото. Watchdog таймер что это-avr053img02. картинка Watchdog таймер что это. картинка avr053img02

На рисунке мы видим, что после генератора на 128 килогерц, сигнал проходит на предделитель, который содержит 10 различных выходов с различным коэффициентом деления. Предделитель настраивается с помощью битов WDP3:WDP0 регистра WDTCSR. Таким образом, интервал времени работы WDT лежит в диапазоне от 15 милисекунд до 8 секунд.

Также мы видим, что с помощью бита WDIE мы можем разрешить прерывания от сторожевого таймера и затем попасть в обработчик, отслеживая состояние бита WDIF. Включается таймер с помощью бита WDE.

Вот он – управляющий регистр сторожевого таймера

Watchdog таймер что это. avr053img03. Watchdog таймер что это фото. Watchdog таймер что это-avr053img03. картинка Watchdog таймер что это. картинка avr053img03

Хоть мы уже и говорили о битах данного регистра выше, но всё же давайте все их рассмотрим подробно, их не так и много, так как у таймера всего один регистр

WDIF (Watchdog Interrupt Flag): флаг прерывания. Устанавливается в 1 в случае истечения интервала времени таймера. Сбрасывается аппаратно.

WDIE (Watchdog Interrupt Enable): бит разрешения прерываний от таймера. если установлен в 1, то прерывания разрешены, если в 0 – запрещены.

Существует таблица зависимости от состояния бетов WDE, WDIE, а также фьюза WDTON

Watchdog таймер что это. avr053img04. Watchdog таймер что это фото. Watchdog таймер что это-avr053img04. картинка Watchdog таймер что это. картинка avr053img04

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

WDP2:WDP0 (Watchdog Timer Prescaler): биты, устанавливающие коэффициент деления предделителя сторожевого таймера.

Вот таблица возможных комбинаций данных битов

Watchdog таймер что это. avr053img05. Watchdog таймер что это фото. Watchdog таймер что это-avr053img05. картинка Watchdog таймер что это. картинка avr053img05

Здесь также даны сами интервалы в единицах времени.

WDCE (Watchdog Change Enable): бит изменения, который должен быть предварительно включен перед тем, как мы соберёмся внести изменения в предделитель с целью изменения коэффициента деления либо для отключения таймера путём занесения в бит WDE значения 0. Сбрасывается аппаратно после четырех тактов.

WDE (Watchdog System Reset Enable): бит включения таймера, а вернее бит включения режима перезагрузки системы по истечению интервала времени таймера WDT.

Ну вот, я думаю и всё насчёт теории по сторожевому таймеру. Если что-то пропустил, то исправим это в процессе сочинения кода.

Код наш выполнять будет следующие задачи.

У нас, помимо WDT, будет также работать ещё таймер TIM1, данный таймер будет работать по совпадению, следовательно в обработчик прерываний от него мы будем попадать через определённое время периодично. В обработчике таймера мы будем периодично включать 10 ножек различных портов, а состояние их на какой-то момент мы будем определять по светодиодам, которые мы к ним подключим. Вернее, мы подключим светодиодную планку с 10-ю светодиодами, не забывая конечно о токоограничивающих резисторах, которые я на всякий случай подключил на 680 Ом, при этом светодиоды светятся вполне ярко. В начале программы мы запустим наш сторожевой таймер WDT и зададим ему определённый интервал времени срабатывания. В процедуре обработки прерываний от таймера 1 мы будем своевременно сбрасывать сторожевой таймер, поэтому, если всё у нас будет нормально с ходом программы, то система у нас будет работать и не перезагрузится.

А для того, чтобы проверить, перезагрузится ли наш WDT по истечению интервала, мы сэмулируем ситуацию, что наш таймер перестанет работать. Для этого мы подключим кнопку к контакту INT0 и обработаем от неё внешнее прерывание, в обработчике которого мы запретим прерывания от нашего таймера. Светодиоды, соответственно перестанут бежать, тем самым сигнализируя нам о том, что наш таймер 1 «сломался». Поэтому сторожевой таймер не перезагрузится, тем самым перезагрузит нашу систему и весь процесс у нас начнётся заново.

В качестве контроллера для урока мы возьмём контролер ATMega328P, расположенный на плате Arduino Nano, к которой подключим обычный USB-программатор через разъём ISP. Вставим нашу плату в макетную плату, подведём к ножке PD2 (INT0) кнопку, а также от ножек D3-D12 (ножки портов PD3:PD7, PB0:PB4) подключим аноды светодиодов планки, а катоды через токоограничивающие резисторы подключим к общему проводу

Watchdog таймер что это. avr053img06. Watchdog таймер что это фото. Watchdog таймер что это-avr053img06. картинка Watchdog таймер что это. картинка avr053img06

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

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

Запустим среду программирования MPLAB X и запустим создание проекта с помощью следующей кнопки

Watchdog таймер что это. avr053img07. Watchdog таймер что это фото. Watchdog таймер что это-avr053img07. картинка Watchdog таймер что это. картинка avr053img07

Выберем «Standalone Project» и идём далее

Watchdog таймер что это. avr053img08. Watchdog таймер что это фото. Watchdog таймер что это-avr053img08. картинка Watchdog таймер что это. картинка avr053img08

На следующем шаге выберем наш контроллер, перед этим отфильтровав контроллеры по семейству для удобства выбора, и движемся далее

Watchdog таймер что это. avr053img09. Watchdog таймер что это фото. Watchdog таймер что это-avr053img09. картинка Watchdog таймер что это. картинка avr053img09

На следующем шаге в качестве программатора выберем Simulator и идём далее

Watchdog таймер что это. avr053img10. Watchdog таймер что это фото. Watchdog таймер что это-avr053img10. картинка Watchdog таймер что это. картинка avr053img10

На следующем шаге выберем компилятор и идём дальше

Watchdog таймер что это. avr053img11. Watchdog таймер что это фото. Watchdog таймер что это-avr053img11. картинка Watchdog таймер что это. картинка avr053img11

Дадим имя нашему проекту и жмём «Finish»

Watchdog таймер что это. avr053img12. Watchdog таймер что это фото. Watchdog таймер что это-avr053img12. картинка Watchdog таймер что это. картинка avr053img12

В дереве проекта в ветке Source Files добавим новый файл main.c с помощью контекстного меню на данной ветке

Watchdog таймер что это. avr053img13. Watchdog таймер что это фото. Watchdog таймер что это-avr053img13. картинка Watchdog таймер что это. картинка avr053img13

Исправим имя файла и нажмём «Finish»

Watchdog таймер что это. avr053img14. Watchdog таймер что это фото. Watchdog таймер что это-avr053img14. картинка Watchdog таймер что это. картинка avr053img14

Файл main.c создан, чуть позже мы его исправим немного.

А пока создадим ещё заголовочный файл main.h аналогичным образом, только выбрав в контекстном меню на ветке «Header Files» и затем выбрав соответствующий пункт

Watchdog таймер что это. avr053img15. Watchdog таймер что это фото. Watchdog таймер что это-avr053img15. картинка Watchdog таймер что это. картинка avr053img15

Для нормального функционирования функции задержки зайдём в свойства проекта и откроем там настройки компилятора, в которых выберем настройку оптимизации

Watchdog таймер что это. avr053img18. Watchdog таймер что это фото. Watchdog таймер что это-avr053img18. картинка Watchdog таймер что это. картинка avr053img18

Оставим уровень оптимизации 0 и установим чекбокс на пункте Debug

Источник

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

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

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

Watchdog таймер что это. image loader. Watchdog таймер что это фото. Watchdog таймер что это-image loader. картинка Watchdog таймер что это. картинка image loader

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

Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (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».

Watchdog таймер что это. image loader. Watchdog таймер что это фото. Watchdog таймер что это-image loader. картинка Watchdog таймер что это. картинка image loader

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

Источник

Сторожевой таймер в надежных встраиваемых системах

Как правило, WTD состоит из счетчика и тактирующего устройства. Значение счетчика по сигналам тактового устройства постоянно уменьшается. Когда оно достигает нуля, генерируется короткий импульс, который сбрасывает и перезапускает систему.

Приложению необходимо периодически, до срабатывания таймера, обновлять значение счетчика, иначе WTD вызовет перезагрузку системы. После обновления счетчика его значение вновь продолжит уменьшаться. Проще говоря, WDT постоянно «следит» за выполнением кода и перезагружает систему, если программное обеспечение зависает или больше не выполняет правильную последовательность кода. Перезагрузка значения WDT с помощью программного обеспечения называется “kicking the watchdog” (перезапуск сторожевого таймера).

Особенности разработки с применением сторожевых таймеров

Типы сторожевых таймеров

WDT могут быть разделены на две больших категории – внешние сторожевые таймеры (рисунок 1) и внутренние, или встроенные (рисунок 2). Подавляющее большинство современных микроконтроллеров имеют встроенные сторожевые таймеры. Производители также предлагают специализированные микросхемы сторожевых таймеров.

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

Watchdog таймер что это. WDT 1(1). Watchdog таймер что это фото. Watchdog таймер что это-WDT 1(1). картинка Watchdog таймер что это. картинка WDT 1(1)Watchdog таймер что это. WDT 2(1). Watchdog таймер что это фото. Watchdog таймер что это-WDT 2(1). картинка Watchdog таймер что это. картинка WDT 2(1)
Рис. 1. Внешний сторожевой таймерРис. 2. Внутренний сторожевой таймер

Проблемы, возникающие при отсутствии сторожевого таймера

В 1994 году для наблюдения за Луной и астероидом 1620 Geo был запущен зонд «Клементина». После нескольких месяцев работы программный сбой привел к включению контрольного двигателя на 11 минут, что привело к большому расходу топлива и вращению аппарата со скоростью 80 об/мин. Управление было в конечном итоге восстановлено, но слишком поздно для успешного завершения миссии.

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

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

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

Структура систем, использующих сторожевой таймер

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

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

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

Для надежной разработки внедрение сторожевого таймера является обязательным.

Период срабатывания сторожевого таймера

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

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

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

Сторожевой таймер в однопоточном приложении

Обычно обновление/ перезапуск сторожевого таймера происходит в конце основного цикла, перед уходом на новый круг (рисунок 3).

Watchdog таймер что это. WTD 3. Watchdog таймер что это фото. Watchdog таймер что это-WTD 3. картинка Watchdog таймер что это. картинка WTD 3

Рис. 3. Типовая схема обновления сторожевого таймера в основном программном цикле приложения

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

К примеру, если длительность основного цикла составляет 500 мс, а максимальный интервал сторожевого таймера – 100 мс, то нет возможности перезапускать его в основном цикле. В данном случае можно настроить один из основных таймеров процессора/ микроконтроллера на срабатывание, к примеру, каждые 50 мс и определить флаг, показывающий, что выполнение программы идет штатно, который будет проверен в конце основного цикла.

Каждые 50 мс по срабатыванию основного таймера проверяется флаг состояния, инкрементируется счетчик. Обновление таймера происходит только в том случае, если система находится в известном состоянии. Если значение счетчика превысило десять (прошло более 500 мс), обработчик при следующем прерывании проверяет флаг состояния, и если он соответствует нормальному исполнению кода, то считается, что программа выполняется корректно. В противном случае выставляется состояние «неизвестное», обновления сторожевого таймера при следующем вызове не будет и система будет перезапущена по истечению интервала сторожевого таймера.

—————-CODE——————
ISR() //50ms free running
<
Count++;
If(Count > 10) //10x50ms
<
Count = 0;

If(State == ALIVE)
<
State = RESET;
>
else
<
State = UNKNOWN;
>
>

Не стоит доверять обновление сторожевого таймера, без проверки каких-либо условий, обработчику прерываний или отдельной задаче ОСРВ, так как в случае ошибки в основной ветке кода обработка прерываний или выполнение других задач ОСРВ может продолжиться, и условия срабатывания сторожевого таймера никогда не наступят. Такой подход не рекомендуется, так как нет гарантии, что работает основной код.

Сторожевой таймер в приложениях на базе ОСРВ

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

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

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

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

Watchdog таймер что это. WDT 4. Watchdog таймер что это фото. Watchdog таймер что это-WDT 4. картинка Watchdog таймер что это. картинка WDT 4

Рис. 4. Реализация сторожевого таймера в ОСРВ, вариант 1

Watchdog таймер что это. WDT 5. Watchdog таймер что это фото. Watchdog таймер что это-WDT 5. картинка Watchdog таймер что это. картинка WDT 5

Рис. 5. Реализация сторожевого таймера в ОСРВ, вариант 2

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

Источник

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

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