Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader и прога одним hex файлом. КАК?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
shamray
Я делаю bootloader для свой программы. Создал 2 проэкта в пределах одного Workspace. Хотелось бы что-бы файлы генерируемые из каждого роекта ложились в один hex.
Для бутлодера определил сегменты так:

Код
//=============================================================================
// Interrupt vectors

-Z(CODE)INTVEC=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-BOOT_SIZE+IVT_SIZE-1)

//=============================================================================
// Code memory

-Z(CODE)NEAR_F,HUGE_F,SWITCH,INITTAB,CODE=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1)
-Z(FARCODE)FAR_F,FARCODE=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1)

//=============================================================================
// RAM

-Z(DATA)NEAR_I,NEAR_Z=RAM_BASE-(RAM_BASE+RAM_SIZE-1)
-Z(DATA)RSTACK+40=RAM_BASE-(RAM_BASE+RAM_SIZE-1)
-Z(DATA)CSTACK+(RAM_SIZE-40-APP_SRAM_USAGE)=RAM_BASE-(RAM_BASE+RAM_SIZE-1)

-Z(CODE)TINY_ID,NEAR_ID,HUGE_ID=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1)


вроде по map файлу ложится нормально. Но вот как добавить код основной прогаммы с 0-го адреса в выходной файл линковщика?
KRS
1. Надо другой программой объеденить 2 HEX файла в один

2. Добавить в проект с основной программой объектный файл скомпилированного бутлоадера

3. В одном проекте и бутлоадер и программа
shamray
Цитата(KRS @ Aug 17 2006, 12:43) *
1. Надо другой программой объеденить 2 HEX файла в один

2. Добавить в проект с основной программой объектный файл скомпилированного бутлоадера

3. В одном проекте и бутлоадер и программа



1. Если не секрет - какой программой.

2. Не понял.

3. В одном проекте? А как потом задать что-бы одни функции ложились по адресам программы, а другие по адресам бутлодера? Вставлять перед каждой функцией указание на нйжный сегмент? Очень это геморно. Притом файлы из основной проги могут называться так-же как и из бутлодера, а пеименовывать их я не хочу.

Может можно как-то указать инкуру типа с адреса 0 вставляй этот файл, а с адреса хххх другой?
IgorKossak
Цитата(shamray @ Aug 17 2006, 12:55) *
Цитата(KRS @ Aug 17 2006, 12:43) *

1. Надо другой программой объеденить 2 HEX файла в один


1. Если не секрет - какой программой.

Текстовым редактором.

Последняя строка hex файла содержит команду конца файла.
У первого из сливаемых файлов её надо удалить, а вместо этой строки вставить содержимое второго файла.
Весь этот гарнитур можно зашивать сразу в МК.
Harbour
Вот один из вариантов для atmega8515, выдержка из makefil'а

....
binmerge:
dd if=/dev/zero of=code.bin bs=1024 count=8
dd if=app.bin conv=notrunc of=code.bin
dd if=boot.bin conv=notrunc of=code.bin bs=1 seek=6144
bin2hex code.bin code.hex
.......
KRS
Цитата(shamray @ Aug 17 2006, 13:55) *
Цитата(KRS @ Aug 17 2006, 12:43) *

2. Добавить в проект с основной программой объектный файл скомпилированного бутлоадера

2. Не понял.


Можно в проект добавить объектный файл, обычным сопсобом как и с файлы.
Можно в xcl файле указать дополнительбные объектники или библиотеки

Но все равно придется код и данные по разным сегментам раскидывать!
с данными и константами проще достаочно один раз
Код
#pragma constseg=
#pragma dataseg=


задать, а вот для кода такой прагмы нету sad.gif
IEC
Господа, теряем суть проблемы: Зачем вообще нужен BOOTLOADER?
Ответ: для загрузки программного кода!
Тогда сначало загружается BOOTLOADER, а затем загружается программный код столько раз сколько нужно!
Зачем две независимые программы объеденять в один файл????
vet
Для первоначальной прошивки кристалла, видимо.
IEC
В таком случае первоначальной прошивкой будет прошивка бутлоадера!
vet
Ну, скажем, нужно прошить партию в тысячу кристаллов. Прошивка в два этапа (зашить бутлодер программатором, затем залить программу по UART или другому интерфейсу) усложнит и замедлит процесс.
IEC
Согласен! Такой вариант не продумал!
sensor_ua
Если программатор коммандной строки (AVReAl, например), то нужно написать правильный батник и усё (разобраться с кодами возврата несложно). Это раз.
IMHO, сливать нужно бинарные файлы. Это самое простое решение. Это два.
Вообще, если использовать IAR, то склеивать можно и в проекте, прописав нужные сегменты, но для простоты в бутлоадере не должны использоваться прерывания (от 2-х таблиц векторов у симулятора раньше срывало крышу, компилер тоже себя вёл неадекватно), а startup бутлоадера нужно тоже не забыть положить в проект и в нужный сегмент приписать. Видел работающее, но сам так не делал.
Думаю, что если нет необходимости, объединять в проекте не стОит.
Andy Great
Не бинарные, а *.hex. Это корректнее..., толерантнее (щас так модно выражаться)
sensor_ua
В hex можно n раз писать по одному адресу - это практически невидимая и обычно малозначащая проблемка. После перевода в bin получим файл без пустот, отрезаем с бутового адреса и дописываем туда же. Затем можно перевести и в hex.
Иначе можно накатать прогу, залазящую на область бута, склеить так, что вначале не прога, а бут, потом уверенно залить и искать непонятки.
По bin прошивки и сравнивать корректнее - чего записано, чего считано... Ведь исходное в hex с пустотами, а сравниваем обычно файлы как минимум по размеруwink.gif , а уж потом по содержимому
Andy Great
Где-то видел утилиту типа hexmerge, порылся - не нашел. Objcopy еще можно попробовать - вдруг получится...
relex
Я использую утллиту hexmate для объединения hex файлов
правда задача была прилепить прошивку DSP к прошивке хоста

запускается с коммандной строки, можно в окне cmd, можно BATником,
в CodeVision например можно сразу указать
Project->Configure->After Make->Program Settings .....

hexmate -help для справки
Andy Great
А еще есть пакет SRecord, так там столько утилит на все случаи жизни... Понятно, hex тоже понимает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.