Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.61/77: Рейтинг темы: голосов - 77, средняя оценка - 4.61
otixsys
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 66
1

програмная перезагрузка контроллера

07.10.2010, 16:49. Просмотров 14206. Ответов 26
Метки нет (Все метки)

Доброго времени суток всем возникла необходимость во время паботы программы перезагрузить контроллер, в связи с этим вопрос что надо написать чтобы контроллер перезагрузился, поиск в инете ничего внятного не дал.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2010, 16:49
Ответы с готовыми решениями:

Самопроизвольная перезагрузка компьютера, Драйвер обнаружил ошибку контроллера \Device\Ide\IdePort2
Здравствуйте. Во время игр компьютер может сам по себе перезагрузиться. Если зайти потом в...

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

Как передать из одного контроллера объект модели в строго типизированное представление другого контроллера
Есть строго типизированное представление в контроллере Main, в методе ListOrders. Как в него можно...

Вызвать метод контроллера из представления или другого контроллера
Мне нужно по кнопке вызвать метод LogOut в контроллере AccountController. Я пытаюсь сделать так:...

Програмная инженерия
Выдали тесты не как не могу найти ответы перелопатил интерент и конспек не нашол не чего...

26
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
07.10.2010, 16:57 2
пин выделить под ресет или wdt.
0
otixsys
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 66
07.10.2010, 16:59 3
нужно сбросить контроллер из программы
0
xroymom
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
07.10.2010, 17:00 4
надо включить вачдог и уйти в бесконечный цикл
0
07.10.2010, 17:00
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
07.10.2010, 17:06 5
Или не изобретать велосипед.
Код
ldi r30,0
ldi r31,0
icall
0
xomto
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 77
07.10.2010, 17:08 6
еще как вариант совсем совтового сброса:
rjmp Riset
0
otixsys
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 66
07.10.2010, 17:09 7
как это сделать на асемблере я представляю, а как это сделать в winavr?
0
xroymom
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
07.10.2010, 17:12 8
Что именно?
WDTCR|=1<<WDE;
while(1);

asm("clr r30\nclr r31\nicall");
0
xomto
0 / 0 / 0
Регистрация: 02.05.2010
Сообщений: 77
07.10.2010, 17:13 9
asm("ldi r30,0\r\n ldi r31,0\r\n icall");
как собственно уже и было написано выше

З.Ы. я все время не успеваю написать =))
0
bikyr
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 21
07.10.2010, 17:25 10
например так
объяви указатель на ф-ю void (*jump_risit)( void ) = 0x0000, а потом в еужном месте вызови jump_risit() прога начнет работать с risita
0
pspost
0 / 0 / 0
Регистрация: 17.02.2010
Сообщений: 192
07.10.2010, 17:29 11
Цитата Сообщение от OmykymForti
Или не изобретать велосипед.
Код:
ldi r30,0
ldi r31,0
icall
Цитата Сообщение от bikyr
например так
объяви указатель на ф-ю void (*jump_risit)( void ) = 0x0000, а потом в еужном месте вызови jump_risit() прога начнет работать с risita
Это не перезагрузка, это просто прыгнули на метку Riset, оно там программно что-то поинициализировало и всё, а периферия, регистры остались как были. Вариант, предложенный xroymom с watchdog, по-моему, самый верный.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
07.10.2010, 17:42 12
Цитата Сообщение от pspost
Это не перезагрузка, это просто прыгнули на метку Riset, оно там программно что-то поинициализировало и всё, а периферия, регистры остались как были. Вариант, предложенный xroymom с watchdog, по-моему, самый верный.
ну и что, что прыгнули. они ведь там снова инитятся. хотя да, в некоторых случаях можно нарватся на косяки...
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
07.10.2010, 17:51 13
Правильно. В старте нужно заново правильно инициализировать контроллер. Мне кажется это правило хорошего тона. В WinAvr это выглядит так:
void _restort(void)
{
cli();
__asm__ __volatile
(
"ldi r30,0" "\n\t"
"ldi r31,0" "\n\t"
"icall" "\n\t"
);
0
o9d
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 1,264
07.10.2010, 17:58 14
На старт прыгать нельзя. Ведь память никто на старте не обнуляет, также не забываем про стек. Сторожевой пес самый простой способ и лучший способ.
0
tyx
0 / 0 / 0
Регистрация: 18.10.2006
Сообщений: 547
07.10.2010, 18:04 15
Цитата Сообщение от o9d
Ведь память никто на старте не обнуляет, также не забываем про стек.
память и стэк в программе должны инициализироватся. при сбросе ведь инициализируются.
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
07.10.2010, 18:22 16
Если программа на С, то если инициализировали переменные и массивы правильно они в памяти окажутся в том месте и в том виде, в котором задумано, не зависимо от того, холодный старт это или горячий ресет.
0
pspost
0 / 0 / 0
Регистрация: 17.02.2010
Сообщений: 192
07.10.2010, 19:05 17
Та не, суть в другом.
Например, вы управляете чем-то с помощью ШИМ. Тут нам захотелось сделать сброс, и программа начинает ковыряться в регистрах таймера при работающем ШИМе. И если вы специально не учитывали этот момент, то, например, отключив тактирование, но оставив подключённым вывод, можно получить на нём сплошной высокий уровень. Т.е. инициализация должна изначально учитывать, что она произойдёт в работающем устройстве, и это как-то нелогично.
Пока такие мысли....
0
imtrix
0 / 0 / 0
Регистрация: 13.07.2010
Сообщений: 13
07.10.2010, 20:09 18
Цитата Сообщение от pspost
Тут нам захотелось сделать сброс .... но оставив подключённым вывод, можно получить на нём сплошной высокий уровень
Нельзя. При аппаратном резете все порты скидываются в состояние "вход без подтяжки". Тот-же результат можно получить в софтовой инициализации, выполнив на каждый порт DDRx=0x00 и PORTx=0x00.
0
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
07.10.2010, 20:11 19
Самое кошерное чтобы тебя загрызла собака.
0
pspost
0 / 0 / 0
Регистрация: 17.02.2010
Сообщений: 192
07.10.2010, 20:30 20
Цитата Сообщение от imtrix
Нельзя. При аппаратном резете все порты скидываются в состояние "вход без подтяжки". Тот-же результат можно получить в софтовой инициализации, выполнив на каждый порт DDRx=0x00 и PORTx=0x00.
Можно, биты "Compare Output Mode" в таймере перекрывают PORTx. Да и ещё какие-нибудь косяки вылезут. Собственно, в этом и есть преимущество аппаратного сброса перед прыганием на метку сброса.
0
07.10.2010, 20:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2010, 20:30

Програмная авторизация на сайте
Здравствуйте форумчане! Прошу помощи с програмной авторизацией на сайте www.ageofclones.com....

Програмная компановка виджетов
У меня есть изначальная форма. Потом с помощью представленного кода, я добавляю на нее комбобоксы,...

Програмная смена иконки
Хочу узнать, возможно ли изменить иконку разрабатываемого приложения на программном уровне и если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru