| Форум РадиоКот 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/ |
|


