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

 
 
> Как сделать перезагрузку программно?, сходу не смог понять
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
Ответов
jorikdima
сообщение Jul 9 2007, 04:43
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



объявить указатель на функцию с адресом 0

вызвать ее
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 9 2007, 05:39
Сообщение #3


дятел
*****

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



Цитата(jorikdima @ Jul 9 2007, 08:43) *
объявить указатель на функцию с адресом 0
вызвать ее

Насколько я знаю, это будет работать не во всех компиляторах.
(не для всех процессоров/моделей памяти/опций линкера по распределению памяти)



Цитата(ivainc1789 @ Jul 9 2007, 09:08) *
Ассемблерная вставка?
Например
Цитата
Или у компилятора есть спец. средства для этого? Я нашел только: __indirect_jump_to 0x00
Indirect jump - это через регистр Z, вполне подойдет если он есть в IAR.

Вот пример, правда для WinAVR:
Код
//-------------------------------------------------------------------
// Перезагрузка (рестарт с адреса 0)
//-------------------------------------------------------------------

void Reset()
{
  __asm__ __volatile__ ("cli");  // запретить прерывания
               // останавливаем всю переферию
  SysTimerStop();
  AdcStop();
  SpiStop();
  PwmStop();
  PortsReset();
  I2cStop();
               // переходим на адрес 0
  __asm__ __volatile__("ldi r30,0\n\t"\
                       "ldi r31,0\n\t"\
                       "ijmp");
}

в каждом xxxStop(); выключается соответствующий модуль и сбрасываются флаги прерываний
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ivainc1789   Как сделать перезагрузку программно?   Jul 8 2007, 20:00
- - IgorKossak   Чтобы сделать перезагрузку полностью с внутренней ...   Jul 8 2007, 21:03
|- - singlskv   Цитата(IgorKossak @ Jul 9 2007, 01:03) Чт...   Jul 8 2007, 22:49
|- - 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
|- - KRS   Цитата(singlskv @ Jul 9 2007, 02:49) Един...   Jul 9 2007, 07:21
||- - singlskv   Цитата(KRS @ Jul 9 2007, 11:21) Что значи...   Jul 9 2007, 09:01
|- - 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
- - 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 Текстовая версия Сейчас: 24th July 2025 - 04:00
Рейтинг@Mail.ru


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