WATCHDOG
- Войдите на сайт для отправки комментариев
Ср, 30/12/2015 - 10:26
Поздравляю всех с наступающим праздником.
Вопрос: как программно зафиксировать количество сработак собаки не используя EEPROM.
Поздравляю всех с наступающим праздником.
Вопрос: как программно зафиксировать количество сработак собаки не используя EEPROM.
Нужно программно только завиксировать (а считывать будет человек) или программно же потом считывать?
В любом случае, использовать внешние инструменты запоминания. Любые. Вариантов миллион. Сразу же после загрузки у Вас есть возможность узнать была ли она вызвана watchdog или другой причиной. Вот, если watchdog - делайте что-нибудь во внешнем мире, что запомнится независимо от питания и перезагрузок (единичку на принтер выводите :) )
Cистема должна работать без участия оператора длительное время, фиксация собаки требуется для статистики (стабильность работы), оператор снимает показания 1 раз в неделю.
Cистема должна работать без участия оператора длительное время, фиксация собаки требуется для статистики (стабильность работы), оператор снимает показания 1 раз в неделю.
Зависит, что в системе кроме МК есть. Например в RTC есть собственное ОЗУ.
Факсировать собаку предпологал только внутренними возможностями ардуино (UNO), возможно есть способ не инициализировать переменную после ресета ?, использование EEPROM крайний вариант.
Предположим, 100 раз сработала собака, на 101 отключили питание - сколько раз сработала собака, с точки зрения оператора?
используется буферный источник питания.
Возможно здесь и не прав, не лазал глубоко. Но вроде основная задача собаки как раз пнуть МК и привести его в работоспособное состояние, начав все с чистого листа.
Да всё верно, основная задача собаки - полный ресет, вопрос в том как оставить после ресета кусочек листа оставить грязным тоесть присвоить переменной статус неинициализируемой.
Ну. Вы же знаете при загрузки от чего она произошла, от дога или нет. Ну, и пользуйте это знание.
Где-то уже писали что при старте можно выяснить по какой причине был этот старт.
ЕвгенийП, trembo, ТС насколько понимаю, хочет через неделю узнать, сколько раз был этот старт. При этом не трогать епром МК и не испоьзовать ничего стороннего.
Если без епром......... можно на стенке зарубки царапать чем-то, как в фильмах.......
пару серв и карандаш.
Коллеги, не забываем что статусный регистр MCUSR с причинами загрузок бутлоадер заботливо отчищает :) Так что юзать эту фичку можно только без бутлоадера.
А что вы хотите выполнить до инициализации среды ардуино?
В cat1 сохранять количество лаев собаки.
oleg_kazakof, имхо для этого не нужно лезть в но_инит_ секцию. Вроде бы этот регистр читается до тех пор, пока его кто нибудь не обнулит. И вроде бы кроме библы wdt в него никто не лезет. Так что перепишите общение с собакой обычными битовыми операциями, (иначе библа обнулит быстрее чем вы считаете этот регистр) и дело в шляпе. Но разумеется бутлоадер никак не обогнуть, придёться от него отказаться совсем.
Погуглил из любопытства по теме, оказывается в последних оптибутах что-то слегка пофиксили. Потестил последний оптибут (v 6.2 https://github.com/Optiboot/optiboot) Всё равно всё криво. MCUSR переписывается в другой регистр , и затирается. А прочесть тот регистр можно только через хитрые секции (пример как это сделать есть в архиве test_reset.ino), но на все причины, кроме браун-аута пишет что перегружал вотчдог. Дурь какая-то. Без бутлоадера всё чётко, не нужно никаких выкрутасов с секциями, всё читается и значения отдаются такие, какие надо. В принципе исходник оптибута есть, можно в нём убрать строки проверки этого регистра, перекомпилить, и сделать бутлоадер без проверки mcusr. Но там вроде как специально задумывали, что бы бутлоадер не грузился всегда, а грузился только после внешнего ресета, поэтому они и анализируют причину загрузки, и регистр отчищают. В общем кому надо, у вас два пути -переписать оптибут как надо или отказаться от него. Второе проще :)
Cпасибо всем принявшим участие в теме. Судя по коментариям самое рациональное решение будет всё же использование EEPROM.
C новым годом.