Перезапуск МК
Перезапуск МК
Как можно перезапустить программно МК?
- Реклама
-
Оne
Чуть чуть в архивах покопаться нужно: WatchDog Timer - что это? и Простой вопрос о полном сбросе ATtiny2313
Re: Перезапуск МК
можно подключить ножку мк к ноге ресет и создать в нужный момент на ней "0"Tohey писал(а):Как можно перезапустить программно МК?
а можно при включеом сторожевом таймере просто сделать паузу в проге.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18675
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Наиболее просто - это как было сказано ранее, подавать сигнал с вывода порта на вывод сброса, но этот вариант не так прост: не для всех МК возможен. Как еще состояние вывода порта будет воспринято в сам момнет сброса? Например, в МК семейства MCS-51 сброс дается высоким уровнем, и при сбросе все выводы всех портов тоже устанавливыаются в высокий уровень, т.е. если просто соединить какой-то вывод с RST - процесс сброса никогда не кончится, программа будет стоять и все.
Применение WDT и паузы так же не всегда возможно, т.к. месколько миллисекунд ожидания могут быть критически важны и недопустимы.
Остаются два варианта: либо использовать МК, в которых имеется стандартный способ программного сброса (например С8051F330), или искать иной способ нарушить работу программы. Кажется, в некоторых МК сброс получается, если сделать переход на несуществующий адрес ПЗУ, или обратиться к несуществующему адресу EEPROM...
В общем, задача не так проста и универсального решения не имеет.
Применение WDT и паузы так же не всегда возможно, т.к. месколько миллисекунд ожидания могут быть критически важны и недопустимы.
Остаются два варианта: либо использовать МК, в которых имеется стандартный способ программного сброса (например С8051F330), или искать иной способ нарушить работу программы. Кажется, в некоторых МК сброс получается, если сделать переход на несуществующий адрес ПЗУ, или обратиться к несуществующему адресу EEPROM...
В общем, задача не так проста и универсального решения не имеет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
DimAlt
- Вымогатель припоя
- Сообщения: 576
- Зарегистрирован: Пт май 19, 2006 05:39:11
- Контактная информация:
Важно!
void (*funcptr)( void ) = 0x0000; - эту строчку указать в начале программы или в заголовочном файле (глобальная переменная).
Здесь обьявляется переменная указатель на функцию,
при вызове вызывается функция с адрессом funcptr=0.
листинг WinAvr
9fc: e0 91 af 00 lds r30, 0x00AF
a00: f0 91 b0 00 lds r31, 0x00B0
a04: 09 95 icall
0x00AF и 0x00B0 содержимое ноль.
если написать asm(rjmp 0) о такая вещь в WinAvr не проходит, программа прыгает на адресс функции main().
Помоему работать должно с любым компилятором.
void (*funcptr)( void ) = 0x0000; - эту строчку указать в начале программы или в заголовочном файле (глобальная переменная).
Здесь обьявляется переменная указатель на функцию,
при вызове вызывается функция с адрессом funcptr=0.
листинг WinAvr
9fc: e0 91 af 00 lds r30, 0x00AF
a00: f0 91 b0 00 lds r31, 0x00B0
a04: 09 95 icall
0x00AF и 0x00B0 содержимое ноль.
если написать asm(rjmp 0) о такая вещь в WinAvr не проходит, программа прыгает на адресс функции main().
Помоему работать должно с любым компилятором.
- Мышонок
- Друг Кота
- Сообщения: 3792
- Зарегистрирован: Чт сен 14, 2006 11:42:09
- Откуда: Обитаю на чердаке
- Контактная информация:
Кстати, про нулики с единичками, кое-что тут было:
http://www.radiokot.ru/forum/viewtopic.php?t=2527
http://www.radiokot.ru/forum/viewtopic.php?t=2527
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
-
DimAlt
- Вымогатель припоя
- Сообщения: 576
- Зарегистрирован: Пт май 19, 2006 05:39:11
- Контактная информация:
Прочитал ветку внимательней
был вопрос
Как можно перезапустить программно МК?
потом
Перезапуск МК и начало проги с начала это ведь разные вещи !
Ну дык как еще перезапустить программно мк, как не запустить программу с адресса 0? В любой проге надо обязательно инициализировать переферию, если писать на Си то, если сделать переход на адресс 0 то это равносильно перезапуску. Про ассемблер молчу, там таких вопросов не возникает, если не считать значения в озу и регистрах общего назначения.
был вопрос
Как можно перезапустить программно МК?
потом
Перезапуск МК и начало проги с начала это ведь разные вещи !
Ну дык как еще перезапустить программно мк, как не запустить программу с адресса 0? В любой проге надо обязательно инициализировать переферию, если писать на Си то, если сделать переход на адресс 0 то это равносильно перезапуску. Про ассемблер молчу, там таких вопросов не возникает, если не считать значения в озу и регистрах общего назначения.


