WDT Reset for Nano
- Войдите на сайт для отправки комментариев
Ср, 29/05/2019 - 19:36
подскажите пожалуйста. нету под рукой НАНО не могу проверить. но на леонардо (встроенный usb) wdt_reset() неправильно сбрасывает, usb не подымается ну или я неправильно делаю.
что я хотел спросить
вот этот макрос
void soft_reset(){ wdt_enable(0); while (1); }
для НАНО абсолютно правильный /верный и программно и железно ? все регистры /порты буду правильно сброшенны , проинициализированны в начальное состояние. usb/serial работает.
или этого кода мало для коректного И БЕЗ ПРОБЛЕМНОГО ресета ?
Для беспроблемного ресета достаточно написать указатель на функцию reset, присвоить ему 0 и вызвать функцию.
Только нафига Вам это нужно?
вы имеете ввиду на нулевой адрес ? да слышал про такой метод. но со слов более знающих чем я он может некоректно сбрасывать. не всегда "всё" вернеться в изначальное состояние. но каждый волен решать сам как ему сбрасывать.
сейчас меня больше интересует конкретно нано и конкретно этот код..
например если открыть ардуино сериал монитор а в Loop будет следующий код
то после ресета , не трогая сериал монитор, он автоматически переинициализируется(становится серым а потом опять активным) и начнется автоматически вывод в сериал без нашего вмешательства ?
Попробуйте и нам расскажете. если у Вас не нано, смоделируйте протеусе, там есть.
Мне кажется, что достаточно смоделировать в голове ситуацию, при котором МК перезагружается, а USB-UART конвертор - продолжает находится в плотном контакте с OS, не прерывая его ни на миг. После этого все странные вопросы должны закончится. Теоретически. Но это не точно, конечно же.
я еще не настолько крут чтоб в голове моделировать поведение железа ;(
у кого нано и кому не трудно попробовать вышеобозначенный код на реальной железке, можете попробовать ?
я еще не настолько крут чтоб в голове моделировать поведение железа ;(
у кого нано и кому не трудно попробовать вышеобозначенный код на реальной железке, можете попробовать ?
полный код приведите, гляну
нано с новым бутлоадером
Nano со старым. После soft_reset() оживает только через программатор.
Это и неудивительно. В старых бутлоадерах проблема crazy loop как была, так и остаётся нефикшенной. По мне так лучше сразу в оптибут зашиться, не разбираясь - старый там, новый...
А где можно прочитать про оптибут старый Новый, чем отличаются, что за ишью?
PS спасибо
https://blog.instalator.ru/archives/798
самый свежий тут https://github.com/Optiboot/optiboot/releases
шить можно другой наной прошитой скетчем ArduinoISP (есть во встроенных примерах). Чтобы долго не сходили с ума - "почему не шьет", на ардуине, которая выступает программатором, запаяйте 10мкФ конденсатор между +5в и rst.
ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.
Так что да, я тоже все новые платы сразу в оптибут перешиваю, не думая.
не заморачиваться, а сразу зашить в нано загрузчик от уно, это оно как раз и есть )))
ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.
Тогда уж сразу добавляйте, что нужно либо править boards.txt (откуда ide узнает размер доступной памяти), либо при заливке скетчей вместо Nano выбирать UNO. В противном случае +1.5кб не будет.
ну я так и делаю. Точнее, оно само определяется как Уно
ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.
Тогда уж сразу добавляйте, что нужно либо править boards.txt (откуда ide узнает размер доступной памяти), либо при заливке скетчей вместо Nano выбирать UNO. В противном случае +1.5кб не будет.
Зачем править? Я же указал ссылку на последнюю версию. Там есть json. Вот ссылку на него вбиваете в настройках в менеджер плат. ИДЕ само все скачает и отконфигурит. Получите плати на Optiboot, выбираете нужную и вперёд.
Да, у меня в версиях выше 1.8.3 бутлоадер не шился ежели что, имейте ввиду
ua6em 16MHz?
ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.
Не, ну можно и так, конечно. Просто смысл грузить в IDE еще какие-то файлы, если optiboot в ней уже есть? Как и сказали, достаточно залить в Nano загрузчик от Uno.
ua6em 16MHz?
стандартная от Рободина, шьётся в версии 1.8.3 без проблем
ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.
Не, ну можно и так, конечно. Просто смысл грузить в IDE еще какие-то файлы, если optiboot в ней уже есть? Как и сказали, достаточно залить в Nano загрузчик от Uno.
ну или выбрать нано с новым загрузчиком, но там память дополнительная не выделяется, если ничего не путаю, остановился для себя на загрузчике от уно
Хосподи, прям, Изауры тоже плачут.))))
Согласен с ЕвгенийП, зачем городить огород если можно просто вызывать
равносильно начальному включению дуины "в розетку".
Хосподи, прям, Изауры тоже плачут.))))
и не говорите. В темах этого ТС надо попкорн продавать - озолотишься просто :)
Как раз не равносильно. Это будет не сброс микроконтроллера, а просто переход на вектор сброса.
Wdt - нормальный вариант. Почему огород?
wdt советует микрочип. и не советует jmp 0. а дальше каждый сам решает
wdt советует микрочип. и не советует jmp 0. а дальше каждый сам решает
Так и я ж про то же - каждый сам кузнец своих граблей.
Только ситуация сложилась ТОЧНО такая же, как была когда Вы "дискутировали" насчёт CLI - Вы прочитали совет, но не поняли почему так советуют, и кидаетесь этот совет неправильно применять.
Они советуют делать через WDT потому, что в определённых случаях переход на 0 не сработает. Так вот, боюсь Вас разочаровать, но так как Вы делаете, не сработает и WDT, причём ровно в тех же самых случаях :)
Они ведь не советовали делать через WDT так, как делаете Вы :)))
Можете пояснить, в каких случаях сброс через WDT не сработает? А то загадки какие-то про определенные случаи.
Можете пояснить, в каких случаях сброс через WDT не сработает?
Я разве говорил, что "сброс через WDT не сработает"? Я говорил, что он не сработает, если делать так, как делаете Вы.
Можете пояснить, в каких случаях сброс через WDT не сработает?
Я разве говорил, что "сброс через WDT не сработает"? Я говорил, что он не сработает, если делать так, как делаете Вы.
Видимо, вы меня перепутали с ТС. И давайте без цепляний к словам, так сказал / не так сказал. Сказали вы не дословно "сброс через WDT не сработает", но другого смысла в сообщении "Они советуют делать через WDT потому, что в определённых случаях переход на 0 не сработает. Так вот, боюсь Вас разочаровать, но так как Вы делаете, не сработает и WDT, причём ровно в тех же самых случаях" я не вижу. Поэтому просто поясните о чем речь, что за случаи.
Я под определенными случаями, в которых не поможет переход на 0, понимаю именно сброс МК, т.е. сброс его внутренних регистров. WDT является одним из источников сброса и, если уж он подает сигнал сброса, то особых случаев тут быть не может.
Или может вы подразумеваете ошибку в коде ТС под словами "так, как делаете Вы"?
Да, действительно, я перепутал Вас с ТС.
Что до Вашего вопроса, ТС идейно неверно использует WD. Смысл WD в том, что будучи заведённым на определённое время, он сработает независимо от того, чем занимается программа. Именно поэтому его рекомендуют как надёжное средство. А так, как его использует (пытается использовать) ТС, он ничем не лучше перехода на 0 - сработает только если программа доберётся до этого места (т.е. не зациклится где-то в другом месте). Но так и переход на 0 сработает ничуть не хуже.
Это голословное утверждение или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"
у меня конечно нет вашей практики (ну так у меня и работа совершенно другая) но даже я чтото не вижу отличий в коде от слова "совсем"
Это голословное утверждение или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"
у меня конечно нет вашей практики (ну так у меня и работа совершенно другая) но даже я чтото не вижу отличий в коде от слова "совсем"
обычно сбрасывают таймер вачдога, а если таймер не сбросился, то вызывается процедура WDT, то-есть loop должен выполняться за время не большее времени установленного в WDT
Это голословное утверждение или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"
а что. вот эта фраза Евгения как "принципиальная разница" не подходит?
Смысл WD в том, что будучи заведённым на определённое время, он сработает независимо от того, чем занимается программа. Именно поэтому его рекомендуют как надёжное средство. А так, как его использует (пытается использовать) ТС,, он ничем не лучше перехода на 0 - сработает только если программа доберётся до этого места (т.е. не зациклится где-то в другом месте).
Ваш макрос soft_reset() как метод борьбы с зависанием совершенно не годится. он будет зависать вместе с программой. что тут непонянтно?
Если вам нужен надежный метод - заводите WDT на 1...8сек и периодически сбрасываете таймер. Как программа зависла - таймер отработает и МК уйдет в ресет, сброся все регистры и переинициализируя периферию. Именно такой метод использования WDT рекомендует микрочип, а не ваш кривой вариант перехода на нулевой адрес.
Это голословное утверждение
Вы опять "дискутируете", вместо того, чтобы вежливо спросить о том, чего не поняли? Рано или поздно Вас начнут просто посылать. Понимаете, можно объяснить новичку что-то, но "дискутировать" с ним, когда он называет твои объяснения "глосоловными" и всяко-разно оспаривает, подумайте, оно кому-нибудь надо?
или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"
Прочитайте внимательно #33 и #36. Если надо, прочитайте несколько раз и медленно. Если что-то непонятно, задайте вопросы (только именно вопросы, а не упрёки в голословности и т.п., иначе будете посланы).
И, если после всего этого, Вы так и не поймёте, почему Ваш подход никуда не годится, то ... займитесь лучше вышиванием крестиком - не Ваше это.
ua6em
полностью согласен. вопрос не про это был. а какую Евгений увидел разницу между мои и не мои вариантом...
Евгений, вы конечно простите может за невежливый вопрос. просто у вас всё на кучу и тролинг и вежливое общение и посыл. а по вопросу. да спасибо про сброс вдг. хоть менно это я не спрашивал.
смотрим пример микрочип
смотрим мой
есть принципиальная разница ?
всем кто нормально участвует в темах, без оскарблений. отвечает подсказывает по мере возможности - спасибо
всем тролям на этом форуме - не бойтесь я не претендую на вашу корону. поэтому не тратьте время трольте в других темах.
смотрим пример микрочип
смотрим мой
есть принципиальная разница ?
Вы продолжаете не по децки тупить. Хотя чему я удивляюсь. это ваше типичное состояние.
Совершенно не важно, есть между этими кодами разница или нет. Вам пишут совсем о другом - ресет так делать не надо, потому что вся эта конструкция может вовремя не вызваться.
PS и. кстати. если вам кажется. что вас тролят - то это тоже от тупости. Я вас давно тролить перестал. ибо никакого интереса - вы слишком тупы для троллинга.
Народ, спор идет о разных вещах.
ТС, вас же ресет интересует? Не защита от зависания, а просто сброс микроконтроллера:
"абсолютно правильный /верный и программно и железно ? все регистры /порты буду правильно сброшенны",
Верно? Ваш первый код это и делает, все с ним нормально. Хотя в скетче, который вы выложили в #7, логичнее было бы сделать вывод в Serial и ресет внутри setup. Тогда было бы видно, что setup вызывается несколько раз.
Кстати, может скажете, для чего вам потребовался сброс?
ТС, вас же ресет интересует? Не защита от завис
Я и не спорил. Влад, вообще меня другое интересовало и мне ответили уже на первой странице. Но как бы да вы верно заметили.
Просто есть тут тролли. Воду мутят. Пошлибы огород вскопали - больше былобы пользы от них
смотрим пример микрочип
смотрим мой
есть принципиальная разница ?
Я Вам уже третий раз говорю, Вы берете примеры, не понимая их смысла. Тоже самое было с cli, когда Вы взяли чей-то пример и стали применять его там, где он неприменим.
Такой ресет, как Вы привели, ничем не отличается от перехода на нулевой адрес.
В общем, делайте что хотите. Вы мне надоели :)
Евгений тот cli тоже от микрочип :) вот негодяи неправильно его используют.
Нет я конечно не утверждаю что у меня не осталось вопросов в мире Харвард, но чего вы решили что не понимаю эти две строки?
Вроде я не говорил что ими можно ветрянку вылечить.
Пока что вы огульно и голословно меня обвинили что я не понимаю и что мой код работать не будет.
И в этот раз именно огульно и голословно.
Как впрочем и в прошлый раз что мой диод моргать не будет.
PS: Евгений почему вы видите вот мне врага?я не пришел сюда ругаться с вами. У вас есть много знаний, хотите - поделитесь. За что вам спасибо. Нет - так нет. Но вот без оскорблений
Владимир, вот именно в этом и есть главный вопрос! :)
так он и не моргал. пока вам готовый код работы с прерыванием не скинули.
Вы мастер забывать, как половина конфы каждый раз просто силком вталкивает в вас знания. Еще мастер переобуваться на ходу - сначала задать идиотский вопрос "if вместо while" а потом утверждать, что спрашивали совсем не это
Вы чтото путаете :)
ничего не путаю - я же проверял ваш код на реальном железе по вашей же просьбе, забыли?
В общем, Вы, как всегда не поняли, что Вам говорят. В посте #44 я Вам написал "делайте как хотите, Вы мне надоели". Это означает, что я просто перестаю Вам что-то писать, только не обращайтесь ко мне напрямую и делайте что и как хотите. Мне в общем-то пофиг. Если желание помочь и что-то объяснить Вы называете враждой, то извиняюсь - не буду Вас больше беспокоить.