Sergey-Ufa 0 18 октября, 2014 Опубликовано 18 октября, 2014 · Жалоба Доброго всем времени суток! Никогда раньше не пользовался bootloader'ом, а тут заинтересовался и решил попробовать. Ничего сложного вроде бы нет, но на один вопрос пока ответа не нашел. Использую CVAVR версия 1.25.8. Каким образом при создании приложения (не загрузчика!) сообщить компилятору, что будет использоваться бут и какой объем флеши планируется под него задать? В закладке Project\Configure\C_Compiler\Program_Typ задается размер области бута, но только при создании собственно самого бута. Если установить здесь тип Boot Loader и скомпилировать любую программу, то CVAVR указывает в окне Information процент заполнения кодом именно области Boot Flash. Как же при создании приложения компилятор будет знать, что в такой то области памяти размещать код нельзя, так как она будет занята бутом? Установка фьюзов BOOSZ и BOOTRST происходит в программаторе и никакого влияния на компиляцию естественно не оказывает. Получается, что CVAVR вообще нельзя использовать для написания приложений, которые предполагается использовать совместно с загрузчиком? Или я что-то не так понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 24 19 ноября, 2014 Опубликовано 19 ноября, 2014 (изменено) · Жалоба Недавно делал загрузчик для LPC1778. Основные положения из своего опыта могу написать такие: 1. Бутлоадер и пользовательская программа пишутся независимо и расположены в разных местах флеш-памяти. Начало программы бутлоадера должно располагаться по адресу 0x0000, т.к. после рестарта контроллер начинает свою работу именно с этого адреса. Пользовательская программа может находиться по любому адресу, но не должна затирать код бутлоадера. Если бутлоадер не выходит за пределы области 0x0000 - 0x1000, то пользовательская программа должна начинаться с адреса 0x1000. 2. Компилятор не может знать, что в памяти есть ещё и загрузчик, но в его силах скомпилировать HEX для записи по конкретному адресу, например 0x1000 вместо 0x0000, используемого по умолчанию. Адрес для компиляции где-то в настройках указывается. 3. После аппаратного рестарта контроллер начинает выполнять программу с адреса 0x0000, но у нас начало программы сидит в адресе 0x1000, поэтому контроллер будет в недоумении и дальнейшее его поведение будет непредсказуемым. 4. Запускать пользовательский HEX должен именно бутлоадер (в общем случае командой JMP 0x1000, в моём случае пришлось помнить про указатель на таблицу векторов и про указатель стека) 5. Один из возможных алгоритмов работы бутлоадера: - проверка некоего условия при включении питания (уровень на одной из ног МК или условие таймаута - если в течение какого-то времени после включения данные не начали поступать, то запустить пользовательскую программу; можно предварительно проверить наличие пользовательской программы в памяти по какому-либо критерию) - приём данных по любому доступному интерфейсу с использованием любого алгоритма - проверка правильности принятых данных с помощью пересчёта всяких контрольных сумм - запись полученных данных во флеш - запуск записанной программы с адреса 0x1000. Запись пользовательской программы посредством бутлоадера выполняется с помощью такой же самопальной программы, которая имеет с ним общий язык, т.е. стандартная скачанная заливалка с самопальным загрузчиком работать не будет. Изменено 19 ноября, 2014 пользователем ДЕЙЛ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 ноября, 2014 Опубликовано 19 ноября, 2014 · Жалоба Вот только ничего общего между LPC1778 и AVR в плане загрузчика нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 24 20 ноября, 2014 Опубликовано 20 ноября, 2014 · Жалоба Вот только ничего общего между LPC1778 и AVR в плане загрузчика нет. думаю, что принцип работы загрузчика одинаков, но а AVR его не реализовывал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться