22
досчитать до нуля, вырабатывается сигнал аппаратного рестарта и процессор
перезапускается. Естественно, простой вариант реализации сторожевого
таймера не является 100% гарантией от выхода системы из сбойного состояния.
Рассмотрим типичную ошибку, допускаемую программистами при
использовании
простого
сторожевого
таймера.
Для
того,
чтобы
контролируемый процесс прекратил работу, достаточно вставить код
обновления счетчика сторожевого таймера внутрь цикла проверки, который
будет всегда давать ложное значение из-за какой-либо ошибки (в аппаратуре
или программе).
while( device_ready() == 0 ) reset_watchdog_timer();
Если функция device_ready всегда будет возвращать ноль, то мы
бесконечное время будем сбрасывать сторожевой таймер, и система будет
всегда находиться в состоянии сбоя.
Нужно заметить, что в большинстве микроконтроллеров реализована
самая простая схема работы сторожевого таймера. Для её нормальной работы
нужна дополнительная, сложная программная обработка.
Ещё одним неудобством простой схемы сторожевого таймера является
выработка аппаратного сигнала рестарта (RESET). В большинстве случаев
гораздо корректнее производить повторную инициализацию или рестарт одной
или нескольких взаимосвязанных частей системы, а полный горячий рестарт
осуществлять только при каких-либо фатальных сбоях.
Достарыңызбен бөлісу: