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

 
 
> перенос таблицы прерываний в секцию бутрома
SpiritDance
сообщение Dec 28 2006, 13:02
Сообщение #1


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Люди! Насколько я понимаю эта функция существует для возможности использовать прерывания в загрузчике. Как потом запусить корректно программу, то есть сделать так чтобы запускались обработчики самой программы. Где вообще про это все почитать поподробнее, никак немогу найти , помню просто что такое было что-то??


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IEC
сообщение Dec 28 2006, 13:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Атмеловский док - AVR109: Self Programming.
На форуме эту тему рассматривают часто!

В загрузчике вектора устанавливаются следующим образом:
/* Разрешение изменения векторов прерываний */
/* Перемещение векторов в загрузочной сектор флэш-памяти */
MCUCR = 0x01; // MCUCR |= (1<<IVCE);
MCUCR = 0x02; // MCUCR |= (1<<IVSEL);

Переход из загрузчика в тело программы: JMPCODE(0x0000);

В теле программы возврат векторов:
/* Разрешение изменения векторов прерываний */
/* Перемещение векторов ив загрузочного сектора флэш-памяти */
MCUCR = 0x01; // MCUCR |= (1<<IVCE);
MCUCR = 0x00; // MCUCR |= (1<<IVSEL);

Еще один момент: В процессе программирования FLASH обязательно отключать прерывания и WDтаймер.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 28 2006, 13:51
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(IEC @ Dec 28 2006, 12:13) *
Переход из загрузчика в тело программы: JMPCODE(0x0000);

В теле программы возврат векторов:
/* Разрешение изменения векторов прерываний */
/* Перемещение векторов ив загрузочного сектора флэш-памяти */
MCUCR = 0x01; // MCUCR |= (1<<IVCE);
MCUCR = 0x00; // MCUCR |= (1<<IVSEL);
Такой подход имеет один недостаток - "основная" программа должна знать, что работает совместно с загрузчиком. Если же обратное переключение таблицы мы перенесем в загрузчик, то единственой особенностью "основной" программы останется огнраничение по размеру:
Код
  __disable_interrupt();
  MCUCR = 0x01; // MCUCR |= (1<<IVCE);
  MCUCR = 0x00; // MCUCR |= (1<<IVSEL);
  (void (*)())0x0000();


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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