Всегда ли WDT перезагружает контроллер.
- Войдите на сайт для отправки комментариев
Ср, 23/06/2021 - 21:32
Всем привет. Прошу поделиться опытом. Были ли у вас ситуации, когда собака не перезагружала контроллер. И он снова начинал работать только после выкл. / вкл. И ваши мысли почему это может происходить? Как избежать в дальнейшем жесткой перезагрузки.
Некоторые компиляторы в протеусе выдают ошибку работы с вачдогом, поэтому может и не сбрасывать. Проверь на специально зависающем коде.
Программно пробовал, перегружает. У меня этот контроллер работает в условиях индустриальных и больших электромагнитных помех. Хотел, чтобы при зависании не надо было ездить на объект хардово перезагружать. Но что то не получается с первого раза. Опыта нет работы с WDT, вот и решил спросить. Да, забыл сказать, что галочка на WDTON на прямых фьюзах в дудке стоит. Может надо её наоборот снять (просто не пробовал это делать - контроллер опять завис)?
Всем привет. Прошу поделиться опытом. Были ли у вас ситуации, когда собака не перезагружала контроллер.
Нет,не бывает! Чудо ;)
Какой МК? Какой загрузчик? Или загружаете через spi?
Да загружаю всегда дудкой через spi. Проц Atmega 328p. В данном проекте флешка забита под завязку (32750) Озушки используется процентов 75.
Да, забыл сказать, что галочка на WDTON на прямых фьюзах в дудке стоит. Может надо её наоборот снять (просто не пробовал это делать - контроллер опять завис)?
В avrdude нет никаких "галочек". Надо просто понимать что вы делаете!
Девайс на atmega328 DIP 16 МГц отработал 3 года 24/7 без зависаний. Теперь бывает раз в неделю по ночам зависает. В конце сетап() пищалка включается на 30 мс. WDT не включал.
Так вот добавил WDT, и теперь при зависании пищалка начинает 4-6 раз в сек срабатывать. МК перезагружается снова и снова. Загрузчика нет, скетч загружаю USBASP. Причину не установил.
https://i.ibb.co/XDqKg5n/image.jpg
Вот такие фьюзы Эта картинка к тому, для GREEN В avrdude нет никаких "галочек". -- Вы пользуетесь дудкой то.![]()
"Программа AVRDUDE_PROG - GUI avrdude"
Сама дудка - это CLI-утилита и "галочек" в ней нет.
Я, говоря о галочках подразумевал, что все понимают по умолчанию, что речь естественно идёт об AVRDUDE_PROG. А так да, в IDE нет ни каких галочек.:))
И это "естественно" говорит позиционирующий себя как якобы высококвалифицированный программист. Ужос.(
Я себя ни когда ни где не позиционировал, и не собираюсь этим заниматься. Да, естественно, когда в предложении звучат 2 слова дудка и галочки. Вы Green позиционируете себя как великий программист и не смогли логически сложить эти 2 слова и понять о чем речь, вот это для меня ужос. Давайте впредь не переходить на личности, а решать проблемы возникающие в аппаратных вопросах. Если по существу нечего сказать, то лучше пройдите мимо. Ок!
Девочки, не ссорьтесь. :)
По существу похоже на проблему в скетче, который никто не видел
Я например использую этот тест
http://arduino.ru/forum/apparatnye-voprosy/arduino-nano-i-wdt-taimer#com...
Если работает - проблема явно в вашей программе
Мне кажется или это верно, - WDT перегружает процессор только если есть программа загрузчика? А так он уходит в бесконечный ребут? У меня загрузчика нет, потому как нет под него места. Если мои предположения верны, то придется тогда самому через
void(* resetFunc) (void) = 0;
переписывать код. А жаль, было всё так просто.:))
Нет, не верно. Есть загрузчик или нет пофигдым. Всё зависит от кода.
-NMi- может поделитесь ссылочкой (или здесь) на правильное подключение WDT в уже готовом коде. Или просто расскажите, что влияет в коде на то, что собака не работает? Я выше привел пример как я пытался запустить в своём коде, не заработало, контроллер виснет. Заранее спасибо.
Привести код в порядок - не судьба, видимо. Лучше будем тратить энергию на перезагрузку через жопу.
Я, говоря о галочках подразумевал, что все понимают по умолчанию, что речь естественно идёт об AVRDUDE_PROG. А так да, в IDE нет ни каких галочек.:))
avrdude - консольная программа, как всё AVR-GCC окружение - изначально сделанная под Линукс. Впоследствии "прибита кривыми гвоздями" к окружению Виндоус.
Графическая оболочка под винду - реально мало используемый софт. При необходимости используется avrdude в чистом виде, из командной строки. Так что "естественность" - ну никак не к месту. Использование всяких костылей - личный выбор каждого, только растягивать свои пристрастия на всех - не логично. ;))
=========================================
Про вочдог - все написано в ДШ. Есть режим прерывания или ресета - устнавливается во фьюзах и потом в регистре.
При разрешении работы и установке таймера, вочдог, после истечения времени таймера, либо перезагрузит МК либо вызовет прерывание. Подтверждение "не зависания" в этом случае выглядит как постоянный сброс таймера вочдога. Например в первой строке loop(), который должен быть спроектирован так, что всегда уложится в отведенное время.
Загрузчик к вочдогу не имеет никакого значения. Его отсутствие только на пользу. Тут имеет место "эхо прошлого". Загрузчик старой нанки не предусматривал сброс WDT и при неаккуратном включении вочдога, ардуинка падала в бесконечную перезагрузку.
=============================
Ну и присоединюсь к Грину. На фоне "плача о покраденном злым начальником коде" детский вопрос выглядит как-то не очень! ;)))) Сорри.
Есть такая weak функция initVariant(), если её определить в своём коде, а в ей прописать отключение WDT, то в большинстве случаев это помогает при bootloop-е Нанки.
Есть такая weak функция initVariant(), если её определить в своём коде, а в ей прописать отключение WDT, то в большинстве случаев это помогает при bootloop-е Нанки.
ДЕт! Для системы с бутлоадером и вд-таймере на 15 мс - не помогает ;)). А без бутлоадера - нормально, но есть ысчо 100500 вариантов отресетить WDT до того, как он нагадит.
Из ДШ вариант:
To wdrakula - вы ошибаетесь если приняли мой пост о злом начальнике за плач. Это ваши фантазии, такие же как и то, что ни кто не пользуется программатором дудкой для прошивки кода. И в данном случае это не детский, как мне кажется вопрос, если я привел код выше, и ни кто пока не дал конкретный ответ на него, почему контроллер зависает. Что делается не правильно, что влияет в основном коде, что WDT не перегружает контроллер, а происходит зависание. Я привел картинку по установленным фьюзам. Что ещё надо, чтобы мой вопрос как то решить положительно? Или все обиделись, что я хотел обидеть типа начальника и теперь вам в падлу делится инфой. Ну тогда прямо кто нибудь скажите в глаза - пошел вон с форума, ты гипотетически обидел наших работодателей, и теперь мы будем и тебя за это посылать в игнор. Я надеюсь, что это не так, и всё же надеюсь разобраться с вашей помощью в данном вопросе. Спасибо
Да, да, да, точно, про это я запамятовал, хотя и лечил так Нанку, когда-то. Утащу вкапилку, штоп еще раз не забыть.
Да, да, да, точно, про это я запамятовал, хотя и лечил так Нанку, когда-то. Утащу вкапилку, штоп еще раз не забыть.
Дет! Родное сердце! Ты очень удивишься. но это кусок прямо в инклюде avr/wdt.h в комментах приведен! ;)))))
Я очень удивилса. До изумления.
To wdrakula - вы ошибаетесь что ни кто не пользуется программатором дудкой для прошивки кода.
Ты читать разучился? Что я написал, точно процитируй, плз.
Пользуют avrdude, а не графическую херню к ней.
-------------------------
По вочдогу. Я же написал, как его использовать, что конкретно тебе не понятно? Задавай вопрос, поясню.
А "губки надувать"... типа ахтунг, ящетаю. ;)))) Или ты девачко, но скрываешь это? ;))
SAB , уж давно на форуме, к чему все эти разговоры ни о чем....
Код целиковый так никто и не увидел, подсказок/вариантов выше ужа дали, с чего вы взяли что МК зависает?, нужен пример конечного кода - пожалуйста, моя поделка из последнего:
-
http://arduino.ru/forum/proekty/ocherednaya-temperaturnaya-signalizatsiy...
- в начале прописываем это
- в setup это
- в loop это
По вочдогу. В схеме кода из №1 вся логика написана правильно. Твоя любимая "галочка" в ГУИ для дудки - заставляет ВДТ всегда работать на перезагрузку, вне зависимости от установки бит в регистре.
Попробуй вочдог на простом коде... ну к примеру бесконечно моргаешь диодиком и смотришь на моментом перезагрузки. Давай есть слона по частям, ОК?
Я рад что нашел понимания. Буду пробовать. Отпишусь. Спасибо.
Спасибо всем, кто принял участие в обсуждении данной проблемы. Особенно моя благодарность andycat за #28 пост. Всё заработало как надо. Приношу свои извинения, если кого то обидел своим недопониманием своими высказываниями. Надеюсь на дальнейшее сотрудничество и взаимопонимание. Всем удачи.
до кучи закину старые темы по данной проблеме:
http://arduino.ru/forum/apparatnye-voprosy/ne-mogu-vylechit-vatchdog-na-goloi-atmege328r-s-vnutr-taktirovaniem-8-mgts
http://arduino.ru/forum/apparatnye-voprosy/watchdog-ili-kak-podruzhit-arduino-so-storozhevym-psom
в них как обычно много воды но есть чего почитать....
на пример :
еще спецмикрухи имеются.
Одна из, везде леплю, где нужна, MAX813L
что галочка на WDTON на прямых фьюзах в дудке стоит. Может надо её наоборот снять
Забей на эти определения: "прямые" или "обратные" (инверсные) фьюзы, всё равно постоянно будешь путать и не запомнишь.
Вместо этого всегда ориентируйся по фьюзам SPIEN и RSTDISBL.
SPIEN всегда включён, а RSTDISBL всегда выключен.
Если надо включить какой-то фьюз - ставь так, как выставлен SPIEN.
Если надо выключить какой-то фьюз - ставь так, как выставлен RSTDISBL.
А теперь посмотри на свой скриншот и подумай, включен или выключен у тебя фьюз WDTON.
Немного не то конечно, но часто видел в ответственных устройствах, где на программный вочдог надеяться мало, ставят отдельный слабенький мк, который общается с главным и если не получает в определенный момент ответа, дергает ему резет.
А на слабенький ставят ещё один слабенький мк и т.д...) Если уж хочется надёжности, то есть аппаратные WDT, в т.ч. и с контролем питания.
А на слабенький ставят ещё один слабенький мк и т.д...) Если уж хочется надёжности, то есть аппаратные WDT и даже с контролем питания.
Это уже зависит от уровня ответственности) в конечно итоге можно и закольцевать)
Это уже зависит от уровня ответственности) в конечно итоге можно и закольцевать)
Геморой.) Софт для одного, для другого, "протокол"...)
Вообще, в случаях когда участвуют двое и более, пишу одну программу для всех, выбирая либо аппаратно, либо программно. Иначе, крайне неудобно.
А на слабенький ставят ещё один слабенький мк и т.д...)
Это уже зависит от уровня ответственности) в конечно итоге можно и закольцевать)
Геморой.) Софт для одного, для другого, "протокол"...)
Вообще, в случаях когда участвуют двое и более, пишу одну программу для всех, выбирая либо аппаратно, либо программно. Иначе, крайне неудобно.
там доп. софта всего ничего.
В данном случае да. Но, захотели мы изменить период срабатывания WDT, или, к примеру, вид запроса... И уже нужно править и в одном софте, и в другом, со всеми вытекающими. А если так многократно... К чему эти доп. телодвижения.)
там доп. софта всего ничего.
В данном случае да. Но, захотели мы изменить период срабатывания WDT, или, к примеру, вид запроса...
На хера? Тогда не надо.
Или у вас всегда всё работает с первого раза? У меня нет.(
Но даже в простейшем случае, типа WDT, я делаю как уже сказал.
Зачитай чонить за Max813L
Дет, жиф! Рад за тебя!
Я зачитай? Именно подобное и рекомендую, а не порнографию с МК.
Я зачитай?
Да ты то причем, ты это и так знаешь. А вот тот, кто рекомендует парнографию с МК, тот пусь и зачитает.
Всем трям. Вопрос как и название темы, но с уточнением - именно ПЕРЕЗАГРУЖАЕТ? Собака настроена на 8 сек. и эмуляция зависания за счёт бесконечного цикла на while. Когда происходит "зависание", сторожевой гарантированно срабатывает(видно по прекрашению работы ШИМ на выводах, и последуюшему переходу в Z-состояние, НО программа не запускается - контроллер остается в таком состоянии. Вернуть к жизни можно хард ресетом или снятием питания. Странность в том, что это зависит от размера скетча(именно размера, потому как добавляемые или отключаемые блоки программы содержат туже математику и работу с портами, что и в основной программе) Т.е. программа занимающая во флеше 95% отрабатывает "зависание" нормально, а 94% и 96% не запускаются после срабатывания собаки.
Плата - Мега2560 с перешитым загрузчиком от IDE 1.8.12(но и старый нормально отрабатывал тест) Пробовал и IDE 1.8.19
Организация вачдога стандартная типа
Пробовал и по примеру Графа из даташита, с отключением в начале сетапа и включением в конце. Компиляция и заливка через родную среду и USB.
Предвижу вопросы по РЕАЛЬЕОМУ скетчу и объвязке, но 250кБ текста ну никто не захочет изучать, подключение с вачдогом ну никак не связано. Можно было бы грешить на библиотеки, но собака вроде аппаратная и испортить её нельзя.
Основной вопрос: что может мешать перезапустить контроллер? Именно перезапустить, т.к. срабатывание собаки гарантированно есть, а вот перехода на нулевой адрес, походу, не происходит. Может бесконечный цикл это плохая эмуляция зависания и при реальном зависании перезапуск произойдёт?
что ж такое можно запихать в скетч для АВР (который в принципе не генерит большого кода) , чтобы он получился 250к?
просто интересно? Роман "Анна каренина" в прогмеме сохранен?
Ну, пусть будет пивоварня :) А так там TFT дисплей с тачем, и только работа с ним и картинки с текстом занимают 3/4 памяти наверное.
что ж такое можно запихать в скетч для АВР...
Не знаю сколько можно запихать, но знаю что у людей в цикле иногда не хватает 2 сек на WDT, приходится ставить 4. При том, что delay-ев в коде не видно. Естественно, это зависит от того куда пихать WDT.
Ответ - было бы желание.) Ну и от ситуации конечно. В моём случае были ответы от модема.
Читай про пробелмы с загрузчиком