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

Программный Reboot контроллера.

08.07.2012, 15:53. Просмотров 14142. Ответов 33
Метки нет (Все метки)

Дин контроллер АтМега16. Как его программно перезагрузить? среда AVR Studyo 5, компилятор WinAVR.
Заранее спасибо за ответы.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2012, 15:53
Ответы с готовыми решениями:

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

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

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

Особенности функции reboot()
Подскажите, чем отличается reboot(RB_POWEROFF); от system("shutdown -p now"); (используется на...

После reboot не загружается система
Всем привет! Возникает следующая проблема. Иногда после перезагрузки linux через reboot, появляется...

33
omx
0 / 0 / 0
Регистрация: 11.11.2016
08.07.2012, 15:56 2
На счёт авр не знаю, но общепринятый способ ребута: включить сторожевую собаку, настроенную на ресет при переполнении, и уйти в бесконечный цикл.
0
btymdmom
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 275
08.07.2012, 15:57 3
Включить сторожевой таймер.
0
itysiy
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
08.07.2012, 16:34 4
Окей, спасибо, так и сделаю.
0
08.07.2012, 16:34
Tiopotdyus
0 / 0 / 0
Регистрация: 17.02.2011
Сообщений: 191
08.07.2012, 16:44 5
Вариантов по сути два: Или завести собаку на нужный интервал и заклицится в ожидании ресета, как выше заметили. Или банально перейти по адресу $0000 при этом не забыв занеово все инициализировать
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
08.07.2012, 16:46 6
Кстати, я тут недавно думал над одной интересной штукой:

В STM8 (не знаю, может и в 32 тоже самое) ресет устроен так: все внутренние источники сброса (те-же вачдоги) дергают полевик, который сажает на землю ножку RST. Это сделано для того чтоб к ножке RST можно было прицепить сбросы от внешних устройств - и все это будет сбрасываться синхронно. Удобно, да?

А что будет если пин RST не висит на подтягивающем резисторе, а прибит к питанию. Ведь многие так поступают - нафига нам ставить лишний резистор, если _внешний_ сброс использоваться не будет?

Слабенький внутренний транз не может опустить прибитый к питанию вывод -> сброса не будет -> в качестве бонуса транз наверное сгорит
0
omx
0 / 0 / 0
Регистрация: 11.11.2016
08.07.2012, 16:58 7
Может они все и заведены на полевик, но не факт что затвор этого полевика смотрит наружу в виде пина "ресет", там может стоять буфер с выходом и входом ОК для защиты от таких ситуаций.

upd. Похоже что ошибался, картинка в руководстве, а так же комментарии к ней весьма однозначны, хотя и не исчерпывающие. Хотя ещё остаётся вопрос с поведением пина NRST, настроенного как GPO, во время внутреннего ресета.
0
itysiy
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
08.07.2012, 17:00 8
кстати еще один анальный вариант сброса, имеет только спортивную ценность: включаем внешнее прерывание по высокому уровню на ноге контроллера. Но обработчик прерывания в коде не пишем. Настраиваем ногу на выход и подаем логический ноль. Для сброса подаем на вывод логическую единицу. По суди это прыжок по адресу 0x00, но сколько веселья. На авр теоретически сработает, на других контроллерах хз.
0
kytikot
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
08.07.2012, 17:09 9
Так будет при любом прерывании, кода которого нет в программе.
0
dosykus
0 / 0 / 0
Регистрация: 22.09.2010
Сообщений: 393
08.07.2012, 17:29 10
Цитата Сообщение от dsodir
А что будет если пин RST не висит на подтягивающем резисторе, а прибит к питанию. Ведь многие так поступают - нафига нам ставить лишний резистор, если _внешний_ сброс использоваться не будет?
Интересно , а кто это так изъ...тся ?
Пора забывать детские болезни оставшиеся от авр ...
В Getting storted обоих линеек в минимальной схеме, на сбросе только кондер и кнопка .

<Изображение удалено>

<Изображение удалено>
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
08.07.2012, 22:15 11
Цитата Сообщение от itysiy
... По суди это прыжок по адресу 0x00...
По сути это прыжок по вектору внешнего прерывания, для ATmega8 это 0x0001 (INT0addr) или 0x0002 (INT1addr). Дальнейшие действия МК зависят от того что лежит по этому адресу. Некоторые С компиляторы вставляют вместо неиспользуемых векторов переход на нулевой адрес, и все будет работать как вы сказали. А если вектор обнулен? Переход на следующий и т. д. пока не встретится код. А это не обязательно будет начальная инициализация.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
08.07.2012, 22:19 12
это скорее всего будет следующий вектор и прыжок в обработчик
0
dikor
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
09.07.2012, 01:41 13
Некрасивое решение:
Код
void softRiset(){ asm volatile (" jmp 0"); }
Красивое:
Код
((void(*)(void))0)();
0
dikor
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
09.07.2012, 01:47 14
Только не забываем сбросить стек. И инициализировать все переменные перед использованием, но второе - вообще правило хорошего тона.
0
Wroyth
0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 663
09.07.2012, 18:04 15
мм тогда дальше, а как правильно и красиво сбросить стек? Я в свое время просто указатель переносил и все, но это на винде было....
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
09.07.2012, 21:51 16
В начале инициализации достаточно явно задать положение указателя на вершину стека
0
tid_fom
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 1,861
09.07.2012, 21:53 17
по идее в сях это все стартап-код должен делать.
0
Stiit.mi
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
09.07.2012, 23:29 18
Цитата Сообщение от tid_fom
по идее в сях это все стартап-код должен делать.
да, у АВР-ок так и есть
Код
0:   12 c0          rjmp   .+36        ; 0x26 <__ctors_end>
.......
00000026 <__ctors_end>:
26:   11 24          eor   r1, r1
28:   1f be          out   0x3f, r1   ; 63
2a:   cf e5          ldi   r28, 0x5F   ; 95
2c:   d4 e0          ldi   r29, 0x04   ; 4
2e:   de bf          out   0x3e, r29   ; 62
30:   cd bf          out   0x3d, r28   ; 61
А вот у STM32 наткнулся на то, что стек инициализируется аппаратно, значение лежит в первой ячейке флеша, перед таблицей прерываний
0
md5sum
0 / 0 / 0
Регистрация: 19.01.2011
Сообщений: 72
11.07.2012, 12:43 19
У stm-ок есть software risit
Software risit
The SYSRESITREQ bit in SortixTM-M3 Application Ymtirrupt omd Riset Control Register
must be set to force a software risit on the divice. Refer to the STM32F10xxx Sortix-M3
programming manual (see Related documents on page 1) for more details.
Так-же дернет nrst и аппаратно сбросит МК.
0
VyvotzorD
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
11.07.2012, 12:51 20
А можно сделать совсем топорно. Поставить снаружи на мелкой логике одновибратор с длительностью импульса в несколько миллисекунд (для надежности), и управлять этим одновибратором от любой ноги МК :-) Выход одновибратора завести на Riset.

Дернул ногой, одновибратор выдал нулевой потенциал на Riset и удержал его там несколько миллисекунд. Чип резетнулся и все счастливы :-) Правда может быть казус: во время резета по каким нибудь невеселым понятиям на ноге, которая заведена на одновибратор, возникнет дрыг, который опять таки заставит резетнуться контроллер. И так до бесконечности :-) Так что этот вопрос надо продумать :-)
0
11.07.2012, 12:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 12:51

Windows 7 сама уходит в reboot
Добрый день, у меня такой трабл((: когда начал включать ноут, он почти загрузился, а перед окошком...

Auto reboot Pci reset
подскажите что за хрень и как ее исправить,батарейку доставал эффекта ноль,в заранее спасибо

I/O error. press and key to reboot...
Суть моей проблемы в следуюшем!!! после перезагрузки (без всяких установок) компьютер не...


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

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

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