всем привет )
вопрос по такому.
в МК есть аппаратные сбросы по WDT/POR/BOR,флаги их..
как мне правильно это все обрабатывать?
например мк(устройство работало штатно) произошел сброс по снижению напряжения питания.1секунда потери например.
цель - для пользователя это просто моргнул индикатор,все работает ка и было.
возьмем что то,часы пусть.
при сбросе адрес выполнения программы переходит на 0x0000,получатся начало ?
Добрый вечер!
POR и BOR это флаги сброса мк. Т.е. вы запустили проц, проверили бит "POR" - если там НОЛЬ, то проц потерял питание. Обрабатываете сброс, этот флаг устанавливаете.
При следующем старте проца с нуля (с адреса 0х0000) опять смотрите этот флаг. Если он равен НУЛЮ, то у вас пропало напряжение. Опять устанавливаете для себя ... ну... если нужно ...
"BOR" - это типа пересброс проца при снижении напряжения до определённого уровня, уровень выбирается в конфигурации проца.
Принцип работы такой-же: установили в софте, при сбросе - проверили.
Вообще - это всё описано в даташите на конкретный проц, в пунктах "Reset" или "Device Configuration", и отличается от проца к процу.
А WDT - это контроль работы проца, т.е. если вы находитесь в стандартном там цикле работы (while) и периодически сбрасываете этот таймер, то проц работает нормально.
А если по каким-то причинам прога ушла куда-то ... то вы уже не сбрасываете этот таймер, и тогда автоматический сброс проца по этому таймеру - вотчдогу.
Вы можете его сбрасывать чисто в майне, можете сбрасывать в несколькиз местах, где программа бывает постоянно.
Суть этого таймера - если что-то пошло не так, и вы не в основном коде, значит вы софтово не сбросите таймер-собачку и проц сбросится, и работа начнётся с нуля.
А часы.... А часы чисто на пик16/18 делать смысла нет, проще отдельно поставить микросхему типа DS1302/DS1307/MCP7941x с отдельной батарейкой 2032 к примеру...
Когда считываешь оттуда время - туда же в свободную память ОЗУ это же время и записываешь.
Если очередной раз считал время из микросхемы, и предыдущее записанное не соответствует - значит - был сброс по каким-то причинам...
Т.е. POR и BOR использовать не обязательно, а WDT желательно при неуверенности в качестве своей прошивки. Бывают сбои внешние, типа некого электромагнитного импульса, ну или
что-то наподобие ...
При этом проц может потерять некие рабочие данные. Но при этом, не будет внутреннего сброса. Для таких целей можно через энное время ( к примеру час) обновлять некую запрограммированную инфу из ЕЕПРОМ проца.
Но это всё индивидуально, и каждый решает сам для себя - какой важности устройство, и что нужно периодически обновлять...
К примеру, есть ребята (фирмы) которые любят приинициализации (запуске) их устройства - забросить статическую инфу в индикатор (некие названия), а после - обновлять только данные.
В результате - приходишь на объект - а там кракозябры на индикаторе!
Влево-вправо страницами меню передёрнул - инфа восстановилась. Вот как-то так.