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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> bootloader
Nikola Kirov
сообщение Sep 19 2005, 17:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 4-11-04
Из: Болгария
Пользователь №: 1 050



хочу написат свой bootloader для ATmega но не поннял из документации как написат его в IAR.
1. Как указат IAR-а какой обем Boot Memory?
2. Как указат что соответсвущие функции принадлежат bootloadera?
3. Как из своеи програме въизват bootloadera?

или написания bootloader -a под IAR совершенно по другому делается?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 19 2005, 18:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Nikola Kirov @ Sep 20 2005, 01:32)
хочу написат свой bootloader для ATmega но не поннял из документации как написат его в IAR.
1. Как указат IAR-а какой обем Boot Memory?
2. Как указат что соответсвущие функции принадлежат bootloadera?
3. Как из своеи програме въизват bootloadera?

или написания bootloader -a под IAR совершенно по другому делается?
*


Сам, честно говоря, бутлоадер не писал, врать не буду. Но мне кажется, что надо
1. в xcl-файле определить сегмент кода для бутлоадера с определенного адреса, нужного объема. По объему смотри даташит на используемый МК.
2. При написании функций, пренадлежащих бутлоадеру, необходимо указывать, к какому сегменту (естественно к сегменту оного) они пренадлежат
3. При программировании МК предварительно запрограммировать фьюз-биты, относящиеся к определению памяти под бутлоадер.
4. не знаю, как с таблицей прерываний. Может она в IAR автоматом закомпилится выше нового сегмента, а мож нет.
В любом случае надо компилить и смотреть ассемблерный листинг - что получилось

Может я, конечно, чушь нагородил, но, мне кажется примерно так это делается. До Нового Года тож собираюсь написать бутлоадер для USB


--------------------
Go to the top of the page
 
+Quote Post
Nikola Kirov
сообщение Sep 19 2005, 20:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 4-11-04
Из: Болгария
Пользователь №: 1 050



Интересно мнение из человека кто писал bootloader именно под IAR.
Go to the top of the page
 
+Quote Post
bmf
сообщение Sep 19 2005, 21:04
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 6-01-05
Из: Украина
Пользователь №: 1 831



Именно под IAR и есть у Atmel: AVR109 - Self-programming
pdf + исходники
h**p://www.atmel.com/dyn/resources/prod_documents/doc1644.pdf
h**p://www.atmel.com/dyn/resources/prod_documents/AVR109.zip
и никаких трудностей переделать для требуемого камня не представляет
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 20 2005, 05:57
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



prottoss прав, в IAR размещение сегментов в памяти надо ручками в xcl править. В примере с Atmel лежит экселевский скрипт, который это xcl генерит.
Но мне кажется лучше это сделать ручками для полного контроля и понимания.
Go to the top of the page
 
+Quote Post
IEC
сообщение Sep 20 2005, 08:40
Сообщение #6


Местный
***

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



Вообще то сначала делается загрузчик, а потом через него заливается основная программа. Загрузчик размещается в верхнюю область памяти программ и при первом включении берет управление на себя. Проверяет необходимость прошивки новой программы (состояние внешних портов или еще что нибудь), и, если надо, по любому интерфесу принимает код и шьет его в нижнюю область. Если прошивать код не надо - передает управление на основную программу по адресу 0000. Вообще то на этом форуме вопрос уже рассматривался неоднократно. Поищи.
Go to the top of the page
 
+Quote Post
Olegovich
сообщение Sep 20 2005, 08:45
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 3-03-05
Из: Санкт-Петербург
Пользователь №: 3 037



Цитата(VladislavS @ Sep 20 2005, 08:57)
prottoss прав, в IAR размещение сегментов в памяти надо ручками в xcl править. В примере с Atmel лежит экселевский скрипт, который это xcl генерит.
Но мне кажется лучше это сделать ручками для полного контроля и понимания.
*


Возможно (а скорее точно), ещё надо будет написать свой cstartup (ассемблерный файл который проводит первичную инициализацию и в котором записан переход на начало кода main).
Ну и останется придумать протокол для загрузки и правила входа в загрузчик, когда пользовательское приложение уже будет загружено. // я загрузчик кстати писал smile.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 20 2005, 09:12
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Olegovich @ Sep 20 2005, 16:45)
Цитата(VladislavS @ Sep 20 2005, 08:57)
prottoss прав, в IAR размещение сегментов в памяти надо ручками в xcl править. В примере с Atmel лежит экселевский скрипт, который это xcl генерит.
Но мне кажется лучше это сделать ручками для полного контроля и понимания.
*


Возможно (а скорее точно), ещё надо будет написать свой cstartup (ассемблерный файл который проводит первичную инициализацию и в котором записан переход на начало кода main).
Ну и останется придумать протокол для загрузки и правила входа в загрузчик, когда пользовательское приложение уже будет загружено. // я загрузчик кстати писал smile.gif
*



Не вижу смысла писать что то еще на ассемблере.
Пишем основную программу, начинающуюся с void main(void) или int main(void), кому как угодно.
За тем создаем сегмент кода, где будет располагаться бутлоадер. Пишем бутлоадер

void main(void)
{ bootloader();

......// основная программа
}


void bootloader(void)
{ if(условие для начала перепрошивки)
{ .......// шьем основную память
}
else
{ return;
}
}


--------------------
Go to the top of the page
 
+Quote Post
Olegovich
сообщение Sep 20 2005, 09:52
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 3-03-05
Из: Санкт-Петербург
Пользователь №: 3 037



Цитата(prottoss @ Sep 20 2005, 12:12)
Цитата(Olegovich @ Sep 20 2005, 16:45)
Цитата(VladislavS @ Sep 20 2005, 08:57)
prottoss прав, в IAR размещение сегментов в памяти надо ручками в xcl править. В примере с Atmel лежит экселевский скрипт, который это xcl генерит.
Но мне кажется лучше это сделать ручками для полного контроля и понимания.
*


Возможно (а скорее точно), ещё надо будет написать свой cstartup (ассемблерный файл который проводит первичную инициализацию и в котором записан переход на начало кода main).
Ну и останется придумать протокол для загрузки и правила входа в загрузчик, когда пользовательское приложение уже будет загружено. // я загрузчик кстати писал smile.gif
*



Не вижу смысла писать что то еще на ассемблере.
Пишем основную программу, начинающуюся с void main(void) или int main(void), кому как угодно.
За тем создаем сегмент кода, где будет располагаться бутлоадер. Пишем бутлоадер

void main(void)
{ bootloader();

......// основная программа
}


void bootloader(void)
{ if(условие для начала перепрошивки)
{ .......// шьем основную память
}
else
{ return;
}
}
*



Так нехорошо. Загрузчик лучше компилить отдельным проектом, он не должен входить в функцию main, т.к. у AVR под загрузчик отводятся верхние области памяти. При таком (up) построении возможно придется перешивать саму область загрузчика, что чревато.
имхо, загрузчик и приложение д.б. независимы.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 20 2005, 10:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Olegovich @ Sep 20 2005, 17:52)
Так нехорошо. Загрузчик лучше компилить отдельным проектом, он не должен входить в функцию main, т.к. у AVR под загрузчик отводятся верхние области памяти. При таком (up) построении возможно придется перешивать саму область загрузчика, что чревато.
имхо, загрузчик и приложение д.б. независимы.
*


Мы ведь говорили выше, что загрузчик располагается по адресам, ранее определенным отдельным сегментом в xcl-файле. Т.е при получении прошивки после компиляции функция загрузчика будет располагаться по нужным нам адресам, т.е. по верхним адресам. Таким образом это возможно. Но на счет того, что загрузчик лучше компилить отдельным проектом я с Вами согласен полностью.


--------------------
Go to the top of the page
 
+Quote Post
ObitJr
сообщение Sep 20 2005, 10:33
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-07-05
Пользователь №: 7 043



+ если они будут разными проектами и еще выставить биты защиты - достаточно надежно получиться. Если прошивать одним проектом то можно потерять bloader - придется шить чем-нить другим
Go to the top of the page
 
+Quote Post
Olegovich
сообщение Sep 20 2005, 12:23
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 3-03-05
Из: Санкт-Петербург
Пользователь №: 3 037



Цитата(prottoss @ Sep 20 2005, 13:03)
Мы ведь говорили выше, что загрузчик располагается по адресам, ранее определенным отдельным сегментом в xcl-файле. Т.е при получении прошивки после компиляции функция загрузчика будет располагаться по нужным нам адресам, т.е. по верхним адресам.
*


Тогда придется перед написанием каждой функции указывать, в каком сегменте ей находиться, это не очень удобно и гибко smile.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 20 2005, 12:40
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Olegovich @ Sep 20 2005, 20:23)
Цитата(prottoss @ Sep 20 2005, 13:03)
Мы ведь говорили выше, что загрузчик располагается по адресам, ранее определенным отдельным сегментом в xcl-файле. Т.е при получении прошивки после компиляции функция загрузчика будет располагаться по нужным нам адресам, т.е. по верхним адресам.
*


Тогда придется перед написанием каждой функции указывать, в каком сегменте ей находиться, это не очень удобно и гибко smile.gif
*



Хотя я с Вами согласился, что проект основной программы должен быть отделен от проекта бутлоадера, сдесь я могу возразить. Когда мы пишем функцию и НЕ указываем адрес по которому должна располагаться функция - компилятор сам располагает эту функцию в сегменте кода CODE - этот сегент всегда определен по умолчанию и в нем располагаются все функции программы включая майн и стартап. А если нам надо, что бы функция располагалась в сегменте бутлоадера, тогда мы указываем принадлежность ее к сегменту и если надо, адрес с которого она располагается


--------------------
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 20 2005, 12:58
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Посмотрие еще вот это может пригодиться:
Прикрепленные файлы
Прикрепленный файл  MegaLoad.rar ( 306.99 килобайт ) Кол-во скачиваний: 127
 


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
IEC
сообщение Sep 20 2005, 13:03
Сообщение #15


Местный
***

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



А можно и сегмент CODE указать начиная с F000h например для программы загрузчика. Проблема в том что загрузчик будет вечен ля процессора, а основная программа временная! До следующей перезаписи!
Go to the top of the page
 
+Quote Post

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

 


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


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