WDT Reset for Nano

alexbmd
Offline
Зарегистрирован: 15.01.2016
подскажите пожалуйста. нету под рукой НАНО не могу проверить. но на леонардо (встроенный usb) wdt_reset() неправильно сбрасывает, usb не подымается ну или я неправильно делаю.
что я хотел спросить
 
вот этот макрос
void soft_reset(){
   wdt_enable(0);
   while (1);
}

 

для НАНО абсолютно правильный /верный и программно и железно ? все регистры /порты буду правильно сброшенны , проинициализированны в начальное состояние. usb/serial работает.
или этого кода мало для коректного И БЕЗ ПРОБЛЕМНОГО ресета ?
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Для беспроблемного ресета достаточно написать указатель на функцию reset, присвоить ему 0 и вызвать функцию.

Только нафига Вам это нужно?

alexbmd
Offline
Зарегистрирован: 15.01.2016

вы имеете ввиду на нулевой адрес ? да слышал про такой  метод. но со слов более знающих  чем я он может некоректно сбрасывать. не всегда "всё" вернеться в изначальное состояние. но каждый волен решать сам как ему сбрасывать. 

сейчас меня больше интересует конкретно нано и конкретно этот код..

 

например если открыть ардуино сериал монитор а в Loop будет следующий код

for (int i=0; i<10; i++) {
delay(1000);
Serial.println(i);
}
soft_reset();

то после ресета , не трогая сериал монитор, он автоматически переинициализируется(становится серым а потом опять активным) и начнется автоматически вывод в сериал без нашего вмешательства ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Попробуйте и нам расскажете. если у Вас не нано, смоделируйте протеусе, там есть.

sadman41
Offline
Зарегистрирован: 19.10.2016

Мне кажется, что достаточно смоделировать в голове ситуацию, при котором МК перезагружается, а USB-UART конвертор - продолжает находится в плотном контакте с OS, не прерывая его ни на миг. После этого все странные вопросы должны закончится. Теоретически. Но это не точно, конечно же.

alexbmd
Offline
Зарегистрирован: 15.01.2016

я еще не настолько крут чтоб в голове моделировать поведение железа ;(

у кого нано и кому не трудно попробовать вышеобозначенный код на реальной железке, можете попробовать ?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

alexbmd пишет:

я еще не настолько крут чтоб в голове моделировать поведение железа ;(

у кого нано и кому не трудно попробовать вышеобозначенный код на реальной железке, можете попробовать ?

полный код приведите, гляну

alexbmd
Offline
Зарегистрирован: 15.01.2016
#include <avr/wdt.h>

void soft_reset(){
   wdt_enable(0);
   while (1);
}

void setup(){
Serial.begin(115200);
}

void loop(){
for (int i=0; i<10; i++) {
delay(1000);
Serial.println(i);
}
soft_reset();
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

нано с новым бутлоадером

Feofan
Offline
Зарегистрирован: 28.05.2017

Nano со старым. После soft_reset() оживает только через программатор.

sadman41
Offline
Зарегистрирован: 19.10.2016

Это и неудивительно. В старых бутлоадерах проблема crazy loop как была, так и остаётся нефикшенной. По мне так лучше сразу в оптибут зашиться, не разбираясь - старый там, новый...

alexbmd
Offline
Зарегистрирован: 15.01.2016

А где можно прочитать про оптибут старый Новый, чем отличаются, что за ишью?
PS спасибо

kostyamat
Онлайн
Зарегистрирован: 16.11.2017

alexbmd пишет:
А где можно прочитать про оптибут старый Новый, чем отличаются, что за ишью? PS спасибо

https://blog.instalator.ru/archives/798

самый свежий тут https://github.com/Optiboot/optiboot/releases

шить можно другой наной прошитой скетчем ArduinoISP (есть во встроенных примерах). Чтобы долго не сходили с ума - "почему не шьет", на ардуине, которая выступает программатором, запаяйте 10мкФ конденсатор между +5в и rst.

 

ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.

Так что да, я тоже все новые платы сразу в оптибут перешиваю, не думая.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

alexbmd пишет:
А где можно прочитать про оптибут старый Новый, чем отличаются, что за ишью? PS спасибо

не заморачиваться, а сразу зашить в нано загрузчик от уно, это оно как раз и есть )))

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

kostyamat пишет:

ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.

 


Тогда уж сразу добавляйте, что нужно либо править boards.txt (откуда ide узнает размер доступной памяти), либо при заливке скетчей вместо Nano выбирать UNO. В противном случае +1.5кб не будет.

b707
Offline
Зарегистрирован: 26.05.2017

VladimirTsibrov пишет:
при заливке скетчей вместо Nano выбирать UNO. .

ну я так и делаю. Точнее, оно само определяется как Уно

kostyamat
Онлайн
Зарегистрирован: 16.11.2017

VladimirTsibrov пишет:
kostyamat пишет:

ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.

 


Тогда уж сразу добавляйте, что нужно либо править boards.txt (откуда ide узнает размер доступной памяти), либо при заливке скетчей вместо Nano выбирать UNO. В противном случае +1.5кб не будет.

Зачем править? Я же указал ссылку на последнюю версию. Там есть json. Вот ссылку на него вбиваете в настройках в менеджер плат. ИДЕ само все скачает и отконфигурит. Получите плати на Optiboot, выбираете нужную и вперёд.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Да, у меня в версиях выше 1.8.3 бутлоадер не шился ежели что, имейте ввиду

alexbmd
Offline
Зарегистрирован: 15.01.2016

ua6em 16MHz?

нашёл вот про нешился но только для 8MГц
- If uploading failes while using the 8 MHz internal oscillator you have three options:
Edit the baudrate line in the boards.txt file, and choose either 57600, 38400 or 19200 baud.
Upload the code using a programmer (USBasp, USBtinyISP etc.) or skip the bootloader by holding down the shift key while clicking the "Upload" button
VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

kostyamat пишет:
VladimirTsibrov пишет:
kostyamat пишет:

ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.

 

Тогда уж сразу добавляйте, что нужно либо править boards.txt (откуда ide узнает размер доступной памяти), либо при заливке скетчей вместо Nano выбирать UNO. В противном случае +1.5кб не будет.
Зачем править? Я же указал ссылку на последнюю версию. Там есть json. Вот ссылку на него вбиваете в настройках в менеджер плат. ИДЕ само все скачает и отконфигурит. Получите плати на Optiboot, выбираете нужную и вперёд.

Не, ну можно и так, конечно. Просто смысл грузить в IDE еще какие-то файлы, если optiboot в ней уже есть? Как и сказали, достаточно залить в Nano загрузчик от Uno.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

alexbmd пишет:

ua6em 16MHz?

нашёл вот про нешился но только для 8MГц
- If uploading failes while using the 8 MHz internal oscillator you have three options:
Edit the baudrate line in the boards.txt file, and choose either 57600, 38400 or 19200 baud.
Upload the code using a programmer (USBasp, USBtinyISP etc.) or skip the bootloader by holding down the shift key while clicking the "Upload" button

стандартная от Рободина, шьётся в версии 1.8.3 без проблем

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

VladimirTsibrov пишет:

kostyamat пишет:
VladimirTsibrov пишет:
kostyamat пишет:

ПС. Из плюшек, к работающему ватчдогу, получите еще и + 1.5кБайта флеша для программ.

 

Тогда уж сразу добавляйте, что нужно либо править boards.txt (откуда ide узнает размер доступной памяти), либо при заливке скетчей вместо Nano выбирать UNO. В противном случае +1.5кб не будет.
Зачем править? Я же указал ссылку на последнюю версию. Там есть json. Вот ссылку на него вбиваете в настройках в менеджер плат. ИДЕ само все скачает и отконфигурит. Получите плати на Optiboot, выбираете нужную и вперёд.

Не, ну можно и так, конечно. Просто смысл грузить в IDE еще какие-то файлы, если optiboot в ней уже есть? Как и сказали, достаточно залить в Nano загрузчик от Uno.

ну или выбрать нано с новым загрузчиком, но там память дополнительная не выделяется, если ничего не путаю, остановился для себя на загрузчике от уно

bwn
Offline
Зарегистрирован: 25.08.2014

Хосподи, прям, Изауры тоже плачут.))))

vlad072
Offline
Зарегистрирован: 01.08.2017

Согласен с ЕвгенийП, зачем городить огород если можно просто вызывать

void(*reboot)(void) = 0;

равносильно начальному включению дуины "в розетку".

b707
Offline
Зарегистрирован: 26.05.2017

bwn пишет:

Хосподи, прям, Изауры тоже плачут.))))

и не говорите. В темах этого ТС надо попкорн продавать - озолотишься просто :)

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

Как раз не равносильно. Это будет не сброс микроконтроллера, а просто переход на вектор сброса.
Wdt - нормальный вариант. Почему огород?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vlad072 пишет:
зачем городить огород
Ну, ТС же написал :-)
alexbmd пишет:
он может некоректно сбрасывать. не всегда "всё" вернеться в изначальное состояние. но каждый волен решать сам как ему сбрасывать.

alexbmd
Offline
Зарегистрирован: 15.01.2016

wdt советует микрочип. и не советует jmp 0. а дальше каждый сам решает

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:

wdt советует микрочип. и не советует jmp 0. а дальше каждый сам решает

Так и я ж про то же - каждый сам кузнец своих граблей.

Только ситуация сложилась ТОЧНО такая же, как была когда Вы "дискутировали" насчёт CLI - Вы прочитали совет, но не поняли почему так советуют,  и кидаетесь этот совет неправильно применять.

Они советуют делать через WDT потому, что в определённых случаях переход на 0 не сработает. Так вот, боюсь Вас разочаровать, но так как Вы делаете, не сработает и WDT, причём ровно в тех же самых случаях :)

Они ведь не советовали делать через WDT так, как делаете Вы :)))

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

Можете пояснить, в каких случаях сброс через WDT не сработает? А то загадки какие-то про определенные случаи.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

VladimirTsibrov пишет:

Можете пояснить, в каких случаях сброс через WDT не сработает? 

Я разве говорил, что "сброс через WDT не сработает"? Я говорил, что он не сработает, если делать так, как делаете Вы.

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

ЕвгенийП пишет:

VladimirTsibrov пишет:

Можете пояснить, в каких случаях сброс через WDT не сработает? 

Я разве говорил, что "сброс через WDT не сработает"? Я говорил, что он не сработает, если делать так, как делаете Вы.

Видимо, вы меня перепутали с ТС. И давайте без цепляний к словам, так сказал / не так сказал. Сказали вы не дословно "сброс через WDT не сработает", но другого смысла в сообщении "Они советуют делать через WDT потому, что в определённых случаях переход на 0 не сработает. Так вот, боюсь Вас разочаровать, но так как Вы делаете, не сработает и WDT, причём ровно в тех же самых случаях" я не вижу. Поэтому просто поясните о чем речь, что за случаи.

Я под определенными случаями, в которых не поможет переход на 0, понимаю именно сброс МК, т.е. сброс его внутренних регистров. WDT является одним из источников сброса и, если уж он подает сигнал сброса, то особых случаев тут быть не может.

Или может вы подразумеваете ошибку в коде ТС под словами "так, как делаете Вы"?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, действительно, я перепутал Вас с ТС. 

Что до Вашего вопроса, ТС идейно неверно использует WD. Смысл WD в том, что будучи заведённым на определённое время, он сработает независимо от того, чем занимается программа. Именно поэтому его рекомендуют как надёжное средство. А так, как его использует (пытается использовать) ТС, он ничем не лучше перехода на 0 - сработает только если программа доберётся до этого места (т.е. не зациклится где-то в другом месте). Но так и переход на 0 сработает ничуть не хуже. 

alexbmd
Offline
Зарегистрирован: 15.01.2016

Это голословное утверждение или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"

у меня конечно нет вашей практики (ну так у меня и работа совершенно другая) но даже я чтото не вижу отличий в коде от слова "совсем"

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

alexbmd пишет:

Это голословное утверждение или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"

у меня конечно нет вашей практики (ну так у меня и работа совершенно другая) но даже я чтото не вижу отличий в коде от слова "совсем"

обычно сбрасывают таймер вачдога, а если таймер не сбросился, то вызывается процедура WDT, то-есть loop должен выполняться за время не большее времени установленного в WDT

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:

Это голословное утверждение или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"

а что. вот эта фраза Евгения как "принципиальная разница" не подходит?

Смысл WD в том, что будучи заведённым на определённое время, он сработает независимо от того, чем занимается программа. Именно поэтому его рекомендуют как надёжное средство. А так, как его использует (пытается использовать) ТС,, он ничем не лучше перехода на 0 - сработает только если программа доберётся до этого места (т.е. не зациклится где-то в другом месте).

Ваш макрос soft_reset() как метод борьбы с зависанием совершенно не годится. он будет зависать вместе с программой. что тут непонянтно?

Если вам нужен надежный метод - заводите WDT на 1...8сек и периодически сбрасываете таймер. Как программа зависла - таймер отработает и МК уйдет в ресет, сброся все регистры и переинициализируя периферию. Именно такой метод использования WDT рекомендует микрочип, а не ваш кривой вариант перехода на нулевой адрес.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:

Это голословное утверждение 

Вы опять "дискутируете", вместо того, чтобы вежливо спросить о том, чего не поняли? Рано или поздно Вас начнут просто посылать. Понимаете, можно объяснить новичку что-то, но "дискутировать" с ним, когда он называет твои объяснения "глосоловными" и всяко-разно оспаривает, подумайте, оно кому-нибудь надо? 

alexbmd пишет:

или вы можете показать принципиальную разницу между тем "так как Вы делаете" и тем как "Они советуют делать"

Прочитайте внимательно #33 и #36. Если надо, прочитайте несколько раз и медленно. Если что-то непонятно, задайте вопросы (только именно вопросы, а не упрёки в голословности и т.п., иначе будете посланы).

И, если после всего этого, Вы так и не поймёте, почему Ваш подход никуда не годится, то ... займитесь лучше вышиванием крестиком - не Ваше это.

alexbmd
Offline
Зарегистрирован: 15.01.2016

ua6em 

полностью согласен. вопрос не про это был. а какую Евгений увидел разницу между мои и не мои вариантом...

Евгений, вы конечно простите может за невежливый вопрос. просто у вас всё на кучу и тролинг и вежливое общение и посыл.  а по вопросу. да спасибо про сброс вдг. хоть менно это я не спрашивал.

 

смотрим пример микрочип

do
{ 
    wdt_enable(0);
    for(;;)       
    {             
    }             
} while(0);

смотрим мой

    wdt_enable(0);
    while(1);

есть принципиальная разница ?

alexbmd
Offline
Зарегистрирован: 15.01.2016

всем кто нормально участвует в темах, без оскарблений. отвечает подсказывает по мере возможности - спасибо

всем тролям на этом форуме - не бойтесь я не претендую на вашу корону. поэтому не тратьте время трольте в других темах.

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:

смотрим пример микрочип

do
{ 
    wdt_enable(0);
    for(;;)       
    {             
    }             
} while(0);

смотрим мой

    wdt_enable(0);
    while(1);

есть принципиальная разница ?

Вы продолжаете не по децки тупить. Хотя чему я удивляюсь. это ваше типичное состояние.

Совершенно не важно, есть между этими кодами разница или нет. Вам пишут совсем о другом - ресет так делать не надо, потому что вся эта конструкция может вовремя не вызваться.

PS и. кстати. если вам кажется. что вас тролят - то это тоже от тупости. Я вас давно тролить перестал. ибо никакого интереса - вы слишком тупы для троллинга.

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

Народ, спор идет о разных вещах.

ТС, вас же ресет интересует? Не защита от зависания, а просто сброс микроконтроллера:
"абсолютно правильный /верный и программно и железно ? все регистры /порты буду правильно сброшенны",
Верно? Ваш первый код это и делает, все с ним нормально. Хотя в скетче, который вы выложили в #7, логичнее было бы сделать вывод в Serial и ресет внутри setup. Тогда было бы видно, что setup вызывается несколько раз.

VladimirTsibrov
Offline
Зарегистрирован: 05.03.2019

Кстати, может скажете, для чего вам потребовался сброс?

alexbmd
Offline
Зарегистрирован: 15.01.2016

VladimirTsibrov пишет:

ТС, вас же ресет интересует? Не защита от завис


Я и не спорил. Влад, вообще меня другое интересовало и мне ответили уже на первой странице. Но как бы да вы верно заметили.
Просто есть тут тролли. Воду мутят. Пошлибы огород вскопали - больше былобы пользы от них

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:

смотрим пример микрочип

смотрим мой

есть принципиальная разница ?

Я Вам уже третий раз говорю, Вы берете примеры, не понимая их смысла. Тоже самое было с cli, когда Вы взяли чей-то пример и стали применять его там, где он неприменим.

Такой ресет, как Вы привели, ничем не отличается от перехода на нулевой адрес.

В общем, делайте что хотите. Вы мне надоели :)

alexbmd
Offline
Зарегистрирован: 15.01.2016

Евгений тот cli тоже от микрочип :) вот негодяи неправильно его используют.
Нет я конечно не утверждаю что у меня не осталось вопросов в мире Харвард, но чего вы решили что не понимаю эти две строки?
Вроде я не говорил что ими можно ветрянку вылечить.
Пока что вы огульно и голословно меня обвинили что я не понимаю и что мой код работать не будет.
И в этот раз именно огульно и голословно.
Как впрочем и в прошлый раз что мой диод моргать не будет.

PS: Евгений почему вы видите вот мне врага?я не пришел сюда ругаться с вами. У вас есть много знаний, хотите - поделитесь. За что вам спасибо. Нет - так нет. Но вот без оскорблений

b707
Offline
Зарегистрирован: 26.05.2017

VladimirTsibrov пишет:
Кстати, может скажете, для чего вам потребовался сброс?

Владимир, вот именно в этом и есть главный вопрос!  :)

 

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:
Как впрочем и в прошлый раз что мой диод моргать не будет.

так он и не моргал. пока вам готовый код работы с прерыванием не скинули.

Вы мастер забывать, как половина конфы каждый раз просто силком вталкивает в вас знания.  Еще мастер переобуваться на ходу - сначала задать идиотский вопрос "if вместо while" а потом утверждать, что спрашивали совсем не это

alexbmd
Offline
Зарегистрирован: 15.01.2016

Вы чтото путаете :)

b707
Offline
Зарегистрирован: 26.05.2017

alexbmd пишет:
Вы чтото путаете :)

ничего не путаю - я же проверял ваш код на реальном железе по вашей же просьбе, забыли?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexbmd пишет:
Евгений почему вы видите вот мне врага?
Я??? В Вас??? Не смешите.

В общем, Вы, как всегда не поняли, что Вам говорят. В посте #44 я Вам написал "делайте как хотите, Вы мне надоели". Это означает, что я просто перестаю Вам что-то писать, только не обращайтесь ко мне напрямую и делайте что и как хотите. Мне в общем-то пофиг. Если желание помочь и что-то объяснить Вы называете враждой, то извиняюсь - не буду Вас больше беспокоить.