Перейти к содержанию
    

Bootloader и CVAVR

Доброго всем времени суток!

Никогда раньше не пользовался bootloader'ом, а тут заинтересовался и решил попробовать. Ничего сложного вроде бы нет, но на один вопрос пока ответа не нашел. Использую CVAVR версия 1.25.8. Каким образом при создании приложения (не загрузчика!) сообщить компилятору, что будет использоваться бут и какой объем флеши планируется под него задать? В закладке Project\Configure\C_Compiler\Program_Typ задается размер области бута, но только при создании собственно самого бута. Если установить здесь тип Boot Loader и скомпилировать любую программу, то CVAVR указывает в окне Information процент заполнения кодом именно области Boot Flash. Как же при создании приложения компилятор будет знать, что в такой то области памяти размещать код нельзя, так как она будет занята бутом? Установка фьюзов BOOSZ и BOOTRST происходит в программаторе и никакого влияния на компиляцию естественно не оказывает. Получается, что CVAVR вообще нельзя использовать для написания приложений, которые предполагается использовать совместно с загрузчиком? Или я что-то не так понимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Недавно делал загрузчик для LPC1778. Основные положения из своего опыта могу написать такие:

1. Бутлоадер и пользовательская программа пишутся независимо и расположены в разных местах флеш-памяти. Начало программы бутлоадера должно располагаться по адресу 0x0000, т.к. после рестарта контроллер начинает свою работу именно с этого адреса. Пользовательская программа может находиться по любому адресу, но не должна затирать код бутлоадера. Если бутлоадер не выходит за пределы области 0x0000 - 0x1000, то пользовательская программа должна начинаться с адреса 0x1000.

2. Компилятор не может знать, что в памяти есть ещё и загрузчик, но в его силах скомпилировать HEX для записи по конкретному адресу, например 0x1000 вместо 0x0000, используемого по умолчанию. Адрес для компиляции где-то в настройках указывается.

3. После аппаратного рестарта контроллер начинает выполнять программу с адреса 0x0000, но у нас начало программы сидит в адресе 0x1000, поэтому контроллер будет в недоумении и дальнейшее его поведение будет непредсказуемым.

4. Запускать пользовательский HEX должен именно бутлоадер (в общем случае командой JMP 0x1000, в моём случае пришлось помнить про указатель на таблицу векторов и про указатель стека)

5. Один из возможных алгоритмов работы бутлоадера:

- проверка некоего условия при включении питания (уровень на одной из ног МК или условие таймаута - если в течение какого-то времени после включения данные не начали поступать, то запустить пользовательскую программу; можно предварительно проверить наличие пользовательской программы в памяти по какому-либо критерию)

- приём данных по любому доступному интерфейсу с использованием любого алгоритма

- проверка правильности принятых данных с помощью пересчёта всяких контрольных сумм

- запись полученных данных во флеш

- запуск записанной программы с адреса 0x1000.

 

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

Изменено пользователем ДЕЙЛ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

думаю, что принцип работы загрузчика одинаков, но а AVR его не реализовывал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...