|
|
  |
Непонятки с BootLoaderom, Вроде все есть, но как-то непонятно... |
|
|
|
Nov 5 2009, 12:47
|

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

|
Цитата(vitek101 @ Nov 5 2009, 13:43)  1. Собирать два проекта в одном Workspace? Как тогда сделать, чтоб приложение зашивалось по 0 адресу, а загрузчик по границе области BootLoaderа? Да, именно два отдельных независимых проекта. За размещение отвечает линкер. Изучайте формат его скрипта. Цитата(vitek101 @ Nov 5 2009, 13:43)  2. Зашивать каждый проект отдельно? Тогда получается 2 hex-файла. Как и чем их потом прошивать при серийном производстве? Можно ли какой-нибудь утилитой прошивать hex по конкретному адресу? Перед передачей на производство файлы "склеить" в один или текстовым редактором или утилитой вроде SRecord. Адрес, по которому заливать, зашит в сам HEX-файл - не нужно ничего указывать дополнительно. Заливать конечно AVRealом - ничего лучше для производства не придумано. Добавлено: ой, AVReal Хмеги еще не умеет. Тогда не знаю. Цитата(vitek101 @ Nov 5 2009, 13:43)  3. Делать все в одном проекте? Мне этот вариант нравится больше всего, но не пойму как определить сегмент для загрузчика. Сегмент определяется в скрипте линкера. Но это неудачное решение. Начиная с того, как вы будете "выкусывать" приложение из новых прошивок для апгрейда уже выпущенных приборов и заканчивая тем, что дрожащей рукой в процессе развития проекта вы можете ненароком изменить загрузчик и сделать загрузчик новых устройств и их боевую программу несовместимыми с загрузчиком в уже выпущенных устройствах.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 5 2009, 14:36
|

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

|
Цитата(V_G @ Nov 5 2009, 16:20)  В ассемблере есть псевдодиректива .ORG, указывающая, с какого адреса размещать дальнейший код. У кого - как. У IAR и в gnu binutils она указывает смещение относительно начала текущего сегмента. В частном случае - IAR и абсолютный сегмент (включен по умолчанию в начале единицы ассемблирования) смещение совпадает с абсолютным адресом. vitek101: Вставляется она в том случае, если ваш проект на ассемблере в одном файле одним большим куском. В противном случае без линкера и его скриптов не обойтись. Описание директивы org надо искать в документации на ваш ассемблер. Поскольку вы не назвали его - точнее ответить невозможно (впрочем, даже если назовете, пересказывать документацию навряд ли кто-то захочет).
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 5 2009, 20:51
|

Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142

|
avr-gcc, bootloader.makefile Цитата(Сергей Борщ) LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDR) Override значения в скрипте линкера. Секция .text (Программа) располагается начиная с заданного адреса. Дальше, как вариант, main.hex и bootloader.hex склеиваются утилитой Srecord в main_and_bootloader.hex.
Сообщение отредактировал Злодей - Nov 5 2009, 20:52
|
|
|
|
|
Nov 6 2009, 14:31
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата Впихнул все в один проект Зачем два проекта включать в один? Проще и правильней собрать отдельно апликейшн и отдельно бутлоадер. Залить бутлоадер в МК программатором. Залить апликейшин средствами бутлоадера. Тем самым протестировать что все ОК. Затем если надо тиражировать - прочитать всю флеш этого МК, полученный образ бутлоадера с аппликейшином шить в остальные МК. К тому же в подавляющейм большинстве случаев бутлоадер один, а аппликейшинов разных много. Будете лепить и компилить бутлоадер для каждого аппликешина?
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|