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

 
 
> Bootloader для Mega48
_Артём_
сообщение Mar 27 2012, 16:16
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Вечер добрый.
Есть задача под М48 и нужно при этом иметь возможность обновления программы.
Посмотрел документ от атмела (AVR112: TWI Bootloader for devices without boot section).
Реализовано так:
1. Переход на бут происходит с адреса 0 (раздельных областей для программы и загрузчика нет).
2. Выход из загрузчика:
Код
void (*FuncPtr) (void) = (void (*)(void)) ((LAST_INTVECT_ADDRESS + 2) / 2);    // Set up function pointer to address after last interrupt vector.
  FuncPtr ();


То есть точка входа для основной программы - это первый адрес после таблицы векторов. Но можно ли быть уверенным что это всегда так (для IAR)?
И ещё: насколько универсальны фунции самопрограммирования использованные в appn (ProcessPageErase, ProcessPageUpdate, Erase_One_Page)?Будут ли они работать на M8, M88? Кто-нибудь ими пользовался?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Apr 2 2012, 04:37
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(_Артём_ @ Mar 27 2012, 20:16) *
Код
void (*FuncPtr) (void) = (void (*)(void)) ((LAST_INTVECT_ADDRESS + 2) / 2);    // Set up function pointer to address after last interrupt vector.
  FuncPtr ();

можно короче:
Код
    (*(void(*)(void))(BOOTLOADER_START_ADDRESS/2))();  // div 2 is to convert byte to word addressing mode for icall


Цитата(_Артём_ @ Mar 27 2012, 20:16) *
То есть точка входа для основной программы - это первый адрес после таблицы векторов. Но можно ли быть уверенным что это всегда так (для IAR)?
Я бы не стал на это полагаться, ибо при отсутствии обработчиков точка входа может быть расположена и поверх векторов. Кто знает что разработчики там наоптимизируют в следующий раз. Я думаю что точка входа должна быть определена линкеру и вам соответственно тоже, посмотрите внимательно на скрипт там же по вектору ресета осуществляется переход по какому-то адресу и этот адрес наверняка определён в виде какого-то имени вот его и стоит использовать.

Цитата(_Артём_ @ Mar 27 2012, 20:16) *
И ещё: насколько универсальны фунции самопрограммирования использованные в appn (ProcessPageErase, ProcessPageUpdate, Erase_One_Page)?Будут ли они работать на M8, M88? Кто-нибудь ими пользовался?
Я использую аналогичный интерфейс от gcc и никаких граблей не замечал. Так что стоит попробовать чтобы не изобретать велосипед.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


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


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