реклама на сайте
подробности

 
 
> Как сделать перезагрузку программно?, сходу не смог понять
ivainc1789
сообщение Jul 8 2007, 20:00
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



В многофайловой Си необходимо в одном из файлов по результатам выполнения функции выполнить перезагрузку контроллера AVR. Т.е. перейти по адресу 0h. Что-то сходу не могу разобраться как грамотно это сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorKossak
сообщение Jul 8 2007, 21:03
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Чтобы сделать перезагрузку полностью с внутренней периферией есть как минимум два пути:
1. дёрнуть в ноль свободным выводом ногу RESET;
2. запустить вотчдог на минимальное время и не сбрасывать его (зациклиться).
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 8 2007, 22:49
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(IgorKossak @ Jul 9 2007, 01:03) *
Чтобы сделать перезагрузку полностью с внутренней периферией есть как минимум два пути:
1. дёрнуть в ноль свободным выводом ногу RESET;

так делать нельзя...
По крайней мере Atmel на этот счет говорит четко, НИЗЯ!
Цитата
2. запустить вотчдог на минимальное время и не сбрасывать его (зациклиться).

Это единственный способ работу которого гарантирует Atmel.
Единственно с минимальным временем нужно осторожнее, чтобы
случайно не оказаться в вечном ресете.

Есть правда еще один способ:
- запрещаем прерывания
- выключаем все запущенные модули
- сбрасываем флаги всех прерываний
- делаем jmp 0
Но это конечно длинный путь и легко чего-нить не предусмотреть...
Go to the top of the page
 
+Quote Post
KRS
сообщение Jul 9 2007, 07:21
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(singlskv @ Jul 9 2007, 02:49) *
Единственно с минимальным временем нужно осторожнее, чтобы
случайно не оказаться в вечном ресете.

Что значит в вечном ресете?
После перезагрузки вотчдог отключится! (если конечно фьюзы не стоят соотв.)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 9 2007, 09:01
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(KRS @ Jul 9 2007, 11:21) *
Что значит в вечном ресете?
После перезагрузки вотчдог отключится! (если конечно фьюзы не стоят соотв.)

Вы правы но лишь частично...
Во первых, как Вы правильно заметили (если конечно фьюзы не стоят соотв.)
Во вторых даже при отключенных соответствующих фузах в более новых
AVR Watchdog работает чуть-чуть иначе.
Вот кусочек даташита на Atmega48/88/168:
Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out
condition, the device will be reset and the Watchdog Timer will stay enabled. If the code is not
set up to handle the Watchdog, this might lead to an eternal loop of time-out resets. To avoid this
situation, the application software should always clear the Watchdog System Reset Flag
(WDRF) and the WDE control bit in the initialisation routine, even if the Watchdog is not in use.


А вот тоже самое переведенное с английского на английский в руководстве
avr-libc для WinAVR:
Note that for newer devices (ATmega88 and newer, effectively any AVR that has the option
to also generate interrupts), the watchdog timer remains active even after a system
reset (except a power-on condition), using the fastest prescaler value (approximately
15 ms). It is therefore required to turn off the watchdog early during program startup,
the datasheet recommends a sequence like the following:
..........................
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ivainc1789   Как сделать перезагрузку программно?   Jul 8 2007, 20:00
|- - ivainc1789   Цитата(singlskv @ Jul 9 2007, 02:49) - де...   Jul 9 2007, 05:08
||- - jorikdima   Цитата(ivainc1789 @ Jul 9 2007, 09:08) Мо...   Jul 9 2007, 05:44
||- - spf   Цитата(ivainc1789 @ Jul 9 2007, 11:08) Мо...   Jul 9 2007, 05:46
||- - Сергей Борщ   Цитата(spf @ Jul 9 2007, 08:46) В общем в...   Jul 9 2007, 08:31
||- - Dog Pawlowa   Использую оба решения, но при использовании програ...   Jul 9 2007, 09:01
||- - singlskv   Цитата(Сергей Борщ @ Jul 9 2007, 12:31) Т...   Jul 9 2007, 09:16
||- - Сергей Борщ   Цитата(singlskv @ Jul 9 2007, 12:16) Серг...   Jul 9 2007, 10:12
|- - IgorKossak   Цитата(singlskv @ Jul 9 2007, 01:49) так ...   Jul 9 2007, 08:03
|- - VladimirYU   [quote name='singlskv' date='Jul 9 200...   Jul 9 2007, 10:00
- - jorikdima   объявить указатель на функцию с адресом 0 вызвать...   Jul 9 2007, 04:43
|- - singlskv   Цитата(jorikdima @ Jul 9 2007, 08:43) объ...   Jul 9 2007, 05:39
- - arttab   нормаль по собаке сделал. дог по условию сбрасыва...   Jul 9 2007, 08:27
- - singlskv   ЦитатаМожно по подобней, аппарвтный сброс еще никт...   Jul 9 2007, 10:44
- - Dog Pawlowa   Цитата(singlskv @ Jul 9 2007, 13:44) Вот ...   Jul 9 2007, 11:56
|- - singlskv   Цитата(Dog Pawlowa @ Jul 9 2007, 15:56) А...   Jul 9 2007, 13:50
|- - Dog Pawlowa   Цитата(singlskv @ Jul 9 2007, 16:50) поче...   Jul 9 2007, 14:00
- - VladimirYU   [quote name='singlskv' date='Jul 9 200...   Jul 9 2007, 12:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016