WatchDog Timer Сторожевой таймер в AVR
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: WatchDog Timer Сторожевой таймер в AVR
PORTB ^= 0x01;
РВ.0 должен из 0 перейти в 0? "^" ведь отрицание (инверсия)?
РВ.0 должен из 0 перейти в 0? "^" ведь отрицание (инверсия)?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: WatchDog Timer Сторожевой таймер в AVR
Gudd-Head писал(а):РВ.0 должен из 0 перейти в 0?
Почему из 0 в 0? Из 0 в 1, из 1 в 0. Инверсия.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: WatchDog Timer Сторожевой таймер в AVR
Ааа... Я СИ не на 100 % понимаю. Надо в железе пробовать 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- eess9
- Вымогатель припоя
- Сообщения: 672
- Зарегистрирован: Ср фев 29, 2012 01:58:32
- Откуда: Харьков, Украина
Re: WatchDog Timer Сторожевой таймер в AVR
Да это я и сам понимаю
Железа пока нет, режем воздух 
Re: WatchDog Timer Сторожевой таймер в AVR
Возникла проблема со сторожевым таймером. на mega328 Как только вместо
WDTCSR=0x1F;
WDTCSR=0x0F;
когда сторожевой таймер настроен на сброс МК бит WDRF регистра MCUSR не устанавливается. То есть я отправляю МК в сон он естественно перезагружается по сторожевому таймеру но регистр MCUSR =0 то есть нет ни одного флага показывающего причину перезагрузки.
WDTCSR=0x1F;
WDTCSR=0x0F;
когда сторожевой таймер настроен на сброс МК бит WDRF регистра MCUSR не устанавливается. То есть я отправляю МК в сон он естественно перезагружается по сторожевому таймеру но регистр MCUSR =0 то есть нет ни одного флага показывающего причину перезагрузки.
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: WatchDog Timer Сторожевой таймер в AVR
YS писал(а):Опять же, если WDT обнуляется каждый раз в конце главного цикла, а в том же конечном автомате что-то пошло не так, но не привело к зависанию, WDT снова не поможет. Мораль - надо вводить затычки-циклы в места отлова ошибок, чтобы МК гарантированно зависал, и т.п. То есть, определенная работа мысли необходима.
Можно поставить внешний WDT, и каждые xxx часов перезагружать микроконтроллер. Или не перезагружать, но после веских доказательств что всё хорошо, например если он прочитает все регистры, память и решит что всё в норме.
Без WDT кстати что может быть? Допустим прилетела дурная заряженная частица и во всех регистрах и памяти образовался хаос. Процессор скорее всего перейдет в пустую часть флеша и перезагрузится, дойдя до адреса 0. Менее вероятно что произойдет зацикливание бесконечное, например вместо
Код: Выделить всё
a=1 (1 ms)
Delay a
окажется
Код: Выделить всё
a=$FF FF FF FF (это влияние помехи)
Delay a
и программа встрянет на 49 часов неожиданно, обычный WDT это прервет.
ну и конечно может застрять в цикле внутри которого WDT reset, можно перед тем как сделать reset проверить множество условий это всё в разы снизит вероятность зависания. Но круче всего внешний WDT. В микроконтроллере внешнего WDT простейшая программа, которая не может зависнуть или ПЛИС. Я такой делал, всетаки остановился на безусловной перезагрузке "большого" коммуникационного контроллера раз в 24 часа, и ежеминутный контроль СОМ портов, нет данных - перезагрузка. Причина зависания в моем случае нагрузка в большой локальной сети, на которую контроллер не расчитан, а с внешним WDT всё работает как часы и цена решения 3$ (на attiny13)
Re: WatchDog Timer Сторожевой таймер в AVR
и цена решения 3$ (на attiny13)
Это вы WDT внешний сделали на еще одном МК, что ли?
Без WDT кстати что может быть?
Все, что угодно. В этом-то и проблема.
Допустим прилетела дурная заряженная частица и во всех регистрах и памяти образовался хаос.
Если говорить именно об эффектах от частиц, то это чаще всего сброс одного или нескольких битов, но никак не всей памяти. Ну и тиристорный эффект, конечно.
В микроконтроллере внешнего WDT простейшая программа, которая не может зависнуть
Так считать ошибочно. Например, та же самая частица попортит FLASH - и все, программа перестанет работать. Чем такой внешний WDT, лучше уж встроенный. Современные МК часто содержат прямо на кристалле совершенно независимый WDT, даже с отдельным генератором. Если уж применять внешние, так тогда уж ставить специально предназначенные для этого микросхемы.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WatchDog Timer Сторожевой таймер в AVR
если принимать в расчет "прилет частиц", то абсолютно надежного решения вообще не существует.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: WatchDog Timer Сторожевой таймер в AVR
ARV писал(а):если принимать в расчет "прилет частиц", то абсолютно надежного решения вообще не существует.
Естественно у той частицы энергия может быть как у кувалды (0.999(9) скорости света), ни что не спасет, резервирование всего и то не факт. Ну и маленький размер кристалла ))
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: WatchDog Timer Сторожевой таймер в AVR
YS писал(а):и цена решения 3$ (на attiny13)
Это вы WDT внешний сделали на еще одном МК, что ли?![]()
Да, основное устройство не конроллер, а программируемый логический контроллер, PC совместимый, у него отдельно процессор, отдельно память, отдельно флеш и сетевой интерфейс. Этот ПЛК имеет свой сторожевой таймер, но встроенный в процессор сторожевой таймер зависает, возможно переклинивает сетевой интерфейс на RTL xxxx какой-то и он блокирует шину или еще что-то аппаратное. ATtiny отслеживает этот момент и перезагружает всё.
Все, что угодно. В этом-то и проблема.
Всё что угодно не может быть. У ATtiny 64 байта памяти, 32 регистра и еще по мелочам, всё можно предусмотреть. Ни сбой памяти, ни регистров не может нарушить программу, нет там циклов в которых программа может застрять. Можно в отладчике прописать любые данные в регистры, зависания не будет.
Так считать ошибочно. Например, та же самая частица попортит FLASH - и все, программа перестанет работать.
Там того флеша 500 байт вся программа. Очень маловероятно. Если переживать за флеш, то объемы SDD на компах в 500 Гбайт и ничего не портится. Более вероятен тиристорный эффект тогда уже, без всяких заряженных частиц от помехи. При сертификации устройств их вроде как и проверяют ВЧ помехами от источника в 2кВ.
Чем такой внешний WDT, лучше уж встроенный. Современные МК часто содержат прямо на кристалле совершенно независимый WDT, даже с отдельным генератором. Если уж применять внешние, так тогда уж ставить
Нормальный вариант, и не дорого. Но именно в моем случае бы не подошло. DS1232 максимум позволяет 1.2 секунды ожидания, у меня минута, и раз в 24 часа обязательная перезагрузка на всякий случай, например, если сигнал о нормальной работе к WDT ложный. Такого не наблюдал ни разу, но на всякий случай указал 24 часа, может можно и больше.
Микроконтроллер что осуществляет функцию внешнего WDT использует встроенный WDT, там всё нормально, хоть и сложно для понимания, WDT второго уровня
Re: WatchDog Timer Сторожевой таймер в AVR
у меня минута, и раз в 24 часа обязательная перезагрузка на всякий случай
Ну, я бы это уже не назвал сторожевым таймером... Скорее, блок контроля.
Насчет частиц это я чего-то правда переборщил, на земле такие сбои вряд ли возможны. Видимо, уже переклинивает - сейчас волею судеб проектирую девайс, который должен будет работать на низкоорбитальном спутнике, и вот там эти эффекты доставляют столько головной боли, что они мне уже везде мерещатся.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- SIM31
- Это не хвост, это антенна
- Сообщения: 1363
- Зарегистрирован: Чт апр 04, 2013 22:22:57
- Откуда: Белгород, РФ
Re: WatchDog Timer Сторожевой таймер в AVR
YS писал(а):Насчет частиц это я чего-то правда переборщил, на земле такие сбои вряд ли возможны
Счетчик гейгера же показывает щелчками не что попало, а количество пробоев газа, на глазок такая же частица может сбросить бит в регистре.
Поискал материалы, много всего интересного, правда мне бесполезного )))
http://www.russianelectronics.ru/leader ... doc/46313/
Считается [1], что проблема сбоев вследствие попадания одиночных частиц в микросхемы стала широко обсуждаться после выхода статьи [5] в 1979 г., в которой описывались результаты исследования причины сбоев микросхем производства Intel Corporation. В статье доказывалось, что причиной наблюдаемых сбоев были альфа-частицы, которые испускали при распаде ядра урана, содержавшиеся в керамических корпусах. Керамику для их изготовления получали из старой урановой шахты.
....
....
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: WatchDog Timer Сторожевой таймер в AVR
Всем привет.
Возник вопрос касательно целостности данных в оперативке после перезапуска МК сторожевым таймером.
Мое устройство хранит данные собранные за продолжительный период времени в оперативке.
Вот и думаю, что с ними будет если ВачДог перезапустит проц.
Если я их потеряю, то мне их ни когда не вернуть и в таком случае лучше делать резервную копию в ЕЕПРОМ.
Но по сути ВачДог перезапустит только проц. Питание с оперативки не пропадет и данные должны сохранится.
Мне конечно же не сложно поставить эксперимент.
( Но проверять придется всю оперативку - каждую ячейку !
)
Хочется знать мнение спецов - можно-ли будет таким данным доверять? Не попадет ли в них ошибка? И на сколько надежна такая манипуляция?
Возник вопрос касательно целостности данных в оперативке после перезапуска МК сторожевым таймером.
Мое устройство хранит данные собранные за продолжительный период времени в оперативке.
Вот и думаю, что с ними будет если ВачДог перезапустит проц.
Если я их потеряю, то мне их ни когда не вернуть и в таком случае лучше делать резервную копию в ЕЕПРОМ.
Но по сути ВачДог перезапустит только проц. Питание с оперативки не пропадет и данные должны сохранится.
Мне конечно же не сложно поставить эксперимент.
( Но проверять придется всю оперативку - каждую ячейку !
Хочется знать мнение спецов - можно-ли будет таким данным доверять? Не попадет ли в них ошибка? И на сколько надежна такая манипуляция?
не зная броду не лезь к вольтмоду
Re: WatchDog Timer Сторожевой таймер в AVR
Мое устройство хранит данные собранные за продолжительный период времени в оперативке.
Долго хранить важные логи в оперативке не стоит. Для этого есть EEPROM, или даже внешняя EEPROM.
Перезапуск МК сторожевым таймером - аварийный режим (за редким исключением). Если это случилось, значит что-то пошло не так, и верить уже ничему нельзя.
Если очень сильно хочется, данные можно защитить кодами FEC (и надеяться на то, что сбоя по питанию не будет), но я бы сказал, что это некоторое извращение. Я бы просто писал в EEPROM...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: WatchDog Timer Сторожевой таймер в AVR
Спасибо! Но ЕЕПРОМ ведь не вечный - не могу я каждый раз в него данные писать.
Как минимум нужно один раз в сутки записать данные, а как максимум, то - каждый раз ( каждый час ).
Внешняя ЕЕПРОМ конечно же может выручить в этом вопросе. Но возможно я не смогу ее подключить - согласно тех заданию, или по нехватке ножек или из-за огромной программы, которая будет выжимать все ресурсы МК..
Знаю, что кто-то умудрялся пользоваться данными после рестарта сторожевым таймером. Но где и когда это было ... ( какое железо я не знаю )..
Как минимум нужно один раз в сутки записать данные, а как максимум, то - каждый раз ( каждый час ).
Внешняя ЕЕПРОМ конечно же может выручить в этом вопросе. Но возможно я не смогу ее подключить - согласно тех заданию, или по нехватке ножек или из-за огромной программы, которая будет выжимать все ресурсы МК..
Знаю, что кто-то умудрялся пользоваться данными после рестарта сторожевым таймером. Но где и когда это было ... ( какое железо я не знаю )..
Последний раз редактировалось uwrtey Вс ноя 08, 2015 14:33:48, всего редактировалось 1 раз.
не зная броду не лезь к вольтмоду
Re: WatchDog Timer Сторожевой таймер в AVR
Кольцевой буфер, тогда надолго хватит. Люди столько не живут. 
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: WatchDog Timer Сторожевой таймер в AVR
Понял, спасибо за совет! 

не зная броду не лезь к вольтмоду
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: WatchDog Timer Сторожевой таймер в AVR
Даже если писать в одну и ту же ячейку, на 11 лет хватит. Оптимистично, однако. Вы уверены, что устройство проработает столько времени?