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

 
 
 
Reply to this topicStart new topic
Sergey-Ufa
сообщение Oct 18 2014, 04:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 27-10-13
Из: Уфа
Пользователь №: 78 917



Доброго всем времени суток!
Никогда раньше не пользовался bootloader'ом, а тут заинтересовался и решил попробовать. Ничего сложного вроде бы нет, но на один вопрос пока ответа не нашел. Использую CVAVR версия 1.25.8. Каким образом при создании приложения (не загрузчика!) сообщить компилятору, что будет использоваться бут и какой объем флеши планируется под него задать? В закладке Project\Configure\C_Compiler\Program_Typ задается размер области бута, но только при создании собственно самого бута. Если установить здесь тип Boot Loader и скомпилировать любую программу, то CVAVR указывает в окне Information процент заполнения кодом именно области Boot Flash. Как же при создании приложения компилятор будет знать, что в такой то области памяти размещать код нельзя, так как она будет занята бутом? Установка фьюзов BOOSZ и BOOTRST происходит в программаторе и никакого влияния на компиляцию естественно не оказывает. Получается, что CVAVR вообще нельзя использовать для написания приложений, которые предполагается использовать совместно с загрузчиком? Или я что-то не так понимаю?
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Nov 19 2014, 12:49
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Недавно делал загрузчик для LPC1778. Основные положения из своего опыта могу написать такие:
1. Бутлоадер и пользовательская программа пишутся независимо и расположены в разных местах флеш-памяти. Начало программы бутлоадера должно располагаться по адресу 0x0000, т.к. после рестарта контроллер начинает свою работу именно с этого адреса. Пользовательская программа может находиться по любому адресу, но не должна затирать код бутлоадера. Если бутлоадер не выходит за пределы области 0x0000 - 0x1000, то пользовательская программа должна начинаться с адреса 0x1000.
2. Компилятор не может знать, что в памяти есть ещё и загрузчик, но в его силах скомпилировать HEX для записи по конкретному адресу, например 0x1000 вместо 0x0000, используемого по умолчанию. Адрес для компиляции где-то в настройках указывается.
3. После аппаратного рестарта контроллер начинает выполнять программу с адреса 0x0000, но у нас начало программы сидит в адресе 0x1000, поэтому контроллер будет в недоумении и дальнейшее его поведение будет непредсказуемым.
4. Запускать пользовательский HEX должен именно бутлоадер (в общем случае командой JMP 0x1000, в моём случае пришлось помнить про указатель на таблицу векторов и про указатель стека)
5. Один из возможных алгоритмов работы бутлоадера:
- проверка некоего условия при включении питания (уровень на одной из ног МК или условие таймаута - если в течение какого-то времени после включения данные не начали поступать, то запустить пользовательскую программу; можно предварительно проверить наличие пользовательской программы в памяти по какому-либо критерию)
- приём данных по любому доступному интерфейсу с использованием любого алгоритма
- проверка правильности принятых данных с помощью пересчёта всяких контрольных сумм
- запись полученных данных во флеш
- запуск записанной программы с адреса 0x1000.

Запись пользовательской программы посредством бутлоадера выполняется с помощью такой же самопальной программы, которая имеет с ним общий язык, т.е. стандартная скачанная заливалка с самопальным загрузчиком работать не будет.

Сообщение отредактировал ДЕЙЛ - Nov 19 2014, 13:02
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2014, 16:31
Сообщение #3


Гуру
******

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



Вот только ничего общего между LPC1778 и AVR в плане загрузчика нет.


--------------------
На любой вопрос даю любой ответ
"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
ДЕЙЛ
сообщение Nov 20 2014, 13:09
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Цитата(Сергей Борщ @ Nov 19 2014, 20:31) *
Вот только ничего общего между LPC1778 и AVR в плане загрузчика нет.

думаю, что принцип работы загрузчика одинаков, но а AVR его не реализовывал
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 05:57
Рейтинг@Mail.ru


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