Например TDA7294

Форум РадиоКот :: Просмотр темы - ATmega32:программный RESET
Форум РадиоКот
https://radiokot.ru/forum/

ATmega32:программный RESET
https://radiokot.ru/forum/viewtopic.php?f=20&t=11330
Страница 1 из 1

Автор:  MegaRazoR [ Вт окт 21, 2008 20:09:10 ]
Заголовок сообщения:  ATmega32:программный RESET

Как правильно сделать программный ресет т.е. полностью перезапустить контроллер сбросив всю SRAM, программный счетчик и все регистры да и све остальное ?

Автор:  tych [ Вт окт 21, 2008 20:24:54 ]
Заголовок сообщения: 

Если есть свободная нога то ею дернуть РЕСЕТ, наверно конденсатор нужен там.

А програмно наверно АСМ вставкой перейти в начало проги и там вставить очистку СРАМ и всех регистров - наверно в виде циклов.

Автор:  Yellow Tiger [ Вт окт 21, 2008 21:16:16 ]
Заголовок сообщения:  Re: ATmega32:программный RESET

MegaRazoR писал(а):
... программный ресет т.е. ... сбросив всю SRAM
А разве Атмел обещает сброс содержимого памяти после ресета? Ей-богу, не помню такого... Изображение

Автор:  smac [ Вт окт 21, 2008 21:56:16 ]
Заголовок сообщения:  Re: ATmega32:программный RESET

MegaRazoR писал(а):
Как правильно сделать программный ресет т.е. полностью перезапустить контроллер сбросив всю SRAM, программный счетчик и все регистры да и све остальное ?

Есть еще один способ: включить и настроить WDT и зациклиться, в результате по прошествию периода WDT получим честный сброс, однако как уже было отмечено, атмел не обещает очистки памяти по сбросу.

Автор:  tych [ Вт окт 21, 2008 21:59:04 ]
Заголовок сообщения:  Re: ATmega32:программный RESET

Yellow Tiger писал(а):
MegaRazoR писал(а):
... программный ресет т.е. ... сбросив всю SRAM
А разве Атмел обещает сброс содержимого памяти после ресета? Ей-богу, не помню такого...

Потому и надо програмно стереть. Компиляторы такое стирание ставят в прогу по-умолчанию обычно.

Автор:  Yellow Tiger [ Вт окт 21, 2008 22:50:06 ]
Заголовок сообщения: 

Компиляторы "C" - ставят (их стандарт обязывает), а Паскаля - нет. ;)

Автор:  MOHOXPOM [ Ср окт 22, 2008 07:22:35 ]
Заголовок сообщения: 

Есть прерывание по 0 адресу – то бишь ресет
void (*funcptr)( void ) = 0x0000;//Программный RESET

Обращаешься как funcptr();

Автор:  ARV [ Ср окт 22, 2008 08:47:38 ]
Заголовок сообщения: 

имхо, tych предложил самый верный "полуаппаратный" вариант, а из чисто програмных - вариант с WDT самый правильный. не забывайте, что сброс выполняет ряд операций над регистрами управления периферией, поэтому просто переход на нулевой адрес не равносилен сбросу!

Автор:  MOHOXPOM [ Ср окт 22, 2008 10:33:56 ]
Заголовок сообщения: 

В принципе - верно. Но переход на адрес 0х0000 дает перезапуск программы начиная с функции main(), что позволяет переопределить переменные и стеки «по новому». Обычно, в связке с обработками неизвестных прерываний и контрольными значениями все работает. Но для верности действительно лучше использовать WDT.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/