Персональные страницы Доп. раздел |
Коновалов Дмитрий Александрович
![]() "Reseter" для сервераСторожевой таймер для сервера института. Как известно компьютеры иногда зависают. Если это рабочая станция, то неудобство от этого испытает только его хозяин. Другое дело, если зависнет сервер, например, сервер института - пострадают все его пользователи. Микроконтроллеры (МК) для предотвращения такой ситуации снабжены специальными устройствами - сторожевыми таймерами. А вот "большие" компьютеры почему-то лишены таких полезных устройств.
Алгоритм работы сторожевых таймеров простой. Программа периодически обнуляет счётчик таймера. Если происходит зависание, то счётчик переполняется и перезапускает программу.
Для сервера института был разработан и изготовлен несложный сторожевой таймер (Рис. 1, 2). Средствами операционной системы на динамик системного блока один раз в минуту подаётся короткий звуковой сигнал. МК регистрирует этот сигнал и сбрасывает счётчика таймера. Если сигнал отсутствует более 2 минут, то МК с помощью реле имитирует кратковременное нажатие кнопки Reset.
![]() Рис. 1 Принципиальная схема
![]() Рис. 2 Монтаж на макетной плате.
![]() Рис. 3 Программа-алгоритм прошивки МК.
На Рис. 3 представлена программа сторожевого таймера. Программа написана, вернее нарисована в среде Algorithm Builder for AVR (AB). Файл проекта АВ для микроконтроллера
После инициализации служебных регистров и конфигурации выводов МК выдерживается пауза ~ 13 минут (для загрузки операционной системы). Этот режим индицируется попеременным зажиганием красного и зелёного светодиодов. Далее МК переходит в режим отсчёта сторожевого интервала ~ 128 сек. Этот режим индицируется периодическим зажиганием зелёного светодиода. При появлении на выводе PB4 МК звукового сигнала происходит прерывание Pin_Change. Обработчик этого прерывания обнуляет счётчик сторожевого интервала r19 и зажигает красный светодиод. Красный светодиод горит на протяжении всего звукового сигнала. Если на протяжении сторожевого интервала звуковой сигнал не появился, то счётчик переполняется и МК на 0,5 сек включает реле.
Однажды сервер завис в процессе генерации звукового сигнала. Сброса не произошло, так как сигнал звучал непрерывно. Для учёта такой маловероятной, но, как оказалось, возможной ситуации в алгоритм пришлось добавить счётчик длительности звукового сигнала на r22.
|