tolstiybh 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба всем привет, Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Соеденить какую-нибудь ногу GPIO с RESET, не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени? Посредством WatchDog ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени? Завести Watchdog, и по необходимости "например, при проверке одного флага" уйти в бесконечный цикл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Ззапретить прерывания, завести Watchdog на самую короткую продолжительность, и только после этого уйти в бесконечный цикл. Например так: void Reset() { __disable_interrupt(); WDTCSR |= (1<<WDCE) | (1<<WDE); WDTCSR = (1<<WDE); // 16 ms for(;;); } (только это не для ATmega88pa писано). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Под avr-gcc для любых AVR. static inline void NORETURN mcu_reset(void) {wdt_enable(WDTO_15MS); cli(); for(;;);} Пора бы уже эту фишку в avr-libc реализовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tolstiybh 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба спасибо огромное Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба ...принудительно по необходимости, например, при проверке одного флага, в определенный момент времени? Соеденить какую-нибудь ногу GPIO с RESET, не?Лучший вариант, ибо это будет как раз в определенный момент времени, а не после того как WDT сработает через определенный момент времени после определенного момента времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Лучший вариант, ибо это будет как раз в определенный момент времени, а не после того как WDT сработает через определенный момент времени после определенного момента времени. Ну, и здесь этот определенный момент также не очень-то определен, с учетом минимально допустимого времени сброса (2,5 мкс по даташиту), с учетом работы внутреннего счетчика задержки ресета, а также с учетом того, что при срабатывании ресета сигнал порта, вызывающего ресет, тоже сбрасывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Ну, и здесь...Согласен, все в мире относительно :) Просто в случае с WDT ко всем выше перечисленным задержкам прибавляется минимальное время реакции WDT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tolstiybh 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Ram и все регитсры сбрасываются или сохраняются значения, при сбросе от WDT? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба Ram и все регитсры сбрасываются или сохраняются значения, при сбросе от WDT?Сброс по WDT работает так же как и сброс от внешнего RESET. Все регистры и порты ВВ принимают начальное значение описаное в даташите на МК. SRAM не изменится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tolstiybh 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил правильно я говорю? И переменная сохранит свое значение до ресета? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил правильно я говорю? И переменная сохранит свое значение до ресета? Ну да. А разве при инициализации программы у Вас флаги не устанавливаются в какое то дефолтное значение? Типа: unsigned int g_Flag_1 = 0x0000; unsigned int g_Flag_2 = DEF_FLAG_A | DEF_FLAG_B; void main(void) { ... } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 8 октября, 2012 Опубликовано 8 октября, 2012 · Жалоба т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил правильно я говорю? А обычно вы их сами обнуляете? Или в стартапе они обнуляются? Сброс по WDT аналогичен обычному, то есть всё пойдёт по тому же сценарию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться