ATmega32:программный RESET
Как правильно сделать программный ресет т.е. полностью перезапустить контроллер сбросив всю SRAM, программный счетчик и все регистры да и све остальное ?
спасибо вам за ваше терпение и ваши подробные ответы ! 
- Реклама
Если есть свободная нога то ею дернуть РЕСЕТ, наверно конденсатор нужен там.
А програмно наверно АСМ вставкой перейти в начало проги и там вставить очистку СРАМ и всех регистров - наверно в виде циклов.
А програмно наверно АСМ вставкой перейти в начало проги и там вставить очистку СРАМ и всех регистров - наверно в виде циклов.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
А разве Атмел обещает сброс содержимого памяти после ресета? Ей-богу, не помню такого...MegaRazoR писал(а):... программный ресет т.е. ... сбросив всю SRAM

- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Есть еще один способ: включить и настроить WDT и зациклиться, в результате по прошествию периода WDT получим честный сброс, однако как уже было отмечено, атмел не обещает очистки памяти по сбросу.MegaRazoR писал(а):Как правильно сделать программный ресет т.е. полностью перезапустить контроллер сбросив всю SRAM, программный счетчик и все регистры да и све остальное ?
Потому и надо програмно стереть. Компиляторы такое стирание ставят в прогу по-умолчанию обычно.Yellow Tiger писал(а):А разве Атмел обещает сброс содержимого памяти после ресета? Ей-богу, не помню такого...MegaRazoR писал(а):... программный ресет т.е. ... сбросив всю SRAM
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Реклама
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Есть прерывание по 0 адресу – то бишь ресет
void (*funcptr)( void ) = 0x0000;//Программный RESET
Обращаешься как funcptr();
void (*funcptr)( void ) = 0x0000;//Программный RESET
Обращаешься как funcptr();
Как зачем мне голова?! Я ей ем!!!
имхо, tych предложил самый верный "полуаппаратный" вариант, а из чисто програмных - вариант с WDT самый правильный. не забывайте, что сброс выполняет ряд операций над регистрами управления периферией, поэтому просто переход на нулевой адрес не равносилен сбросу!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
В принципе - верно. Но переход на адрес 0х0000 дает перезапуск программы начиная с функции main(), что позволяет переопределить переменные и стеки «по новому». Обычно, в связке с обработками неизвестных прерываний и контрольными значениями все работает. Но для верности действительно лучше использовать WDT.
Как зачем мне голова?! Я ей ем!!!


