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

 
 
 
Reply to this topicStart new topic
> Генерация файлов .bin и .hex в AVR32 Studio, Размеры файлов?
jasper
сообщение Jul 22 2010, 12:12
Сообщение #1


Народный чинитель
***

Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811



Требуется получить двоичный bin-файл из elf.
Делаю все согласно рекомендациям:
Цитата
avr32-objcopy -O binary myfile.elf myfile.bin

Но в результате размер сгенерированного файла получается равным 1.25GB! wacko.gif
Пробовал генерить hex-файл, он тоже получается огромного размера и явно пустой.
В чем дело? Как это можно исправить?

Пока вышел из положения следующим образом.
В начале скармливаю elf-файл BatchISP, со следующей командной строкой:
Цитата
batchisp -device at32uc3a0512 -hardware usb -operation LOADBUFFER myfile.elf SAVEBUFFER myfile.hex HEX386

У которого, почему-то, получается создает нормальный hex-файл, нормального размера. Работает он, правда, только, когда плата по USB подключена.
А уже из полученного таким образом hex'а генерю нормальный bin (адекватного размера) при помощи avr32-objcopy:
Цитата
avr32-objcopy -I ihex -O binary myfile.hex myfile.bin



Но все равно, хочется сделать это как-нибудь по-нормальному. Может кто-нибудь уже сталкивался с такой проблемой? huh.gif

Сообщение отредактировал jasper - Jul 22 2010, 12:23
Go to the top of the page
 
+Quote Post
Dopler
сообщение Sep 13 2010, 10:53
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



С генерацией .hex никаких проблем не возникает, файл получается командой
Код
avr32-objcopy -O ihex myfile.elf myfile.hex


А вот при генерации .bin действительно получаются гигабайтные файлы. Скорее всего это связано с тем, что flash расположена со смещением 0x80000000, а файл формируется с нулевого адреса. Поковырял настройки avr32-objcopy, но ничего внятного не получилось (скорее всего плохо ковырял, надо читать документацию).

Зато из полученного .hex .bin легко формируется утилитой hex2bin.


Если и .hex файл получается большим, то скорее всего в исходном .elf файле неправильно определены секции ОЗУ. Например, для секций .stack и .heap указано, что они загружаемые и т.д.
Go to the top of the page
 
+Quote Post
Maddy
сообщение Sep 14 2010, 10:48
Сообщение #3


Участник
*

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335



Странное что-то у вас творится ...
Код
avr32-objcopy -O binary uc3a0512-boot-072.elf uc3a0512-boot-072.bin

14.09.2010  14:44            10 348 uc3a0512-boot-072.bin
14.09.2010  14:44           181 798 uc3a0512-boot-072.elf


Живой проект загрузчика ...
Код
avr32-objcopy --version
GNU objcopy (atmel-1.2.0-(mingw32_special)) 2.19.20081016


может таки тама реально гиг адресов получается ?
Go to the top of the page
 
+Quote Post
Dopler
сообщение Sep 15 2010, 06:32
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



А полученный .bin вы загружаете со смещением 0x80000000?
Вот dump моего тестового .elf файла, во flash расположены только секции .reset и .text,
остальные расположены в ОЗУ, в том числе и обработчик прерываний (таблица векторов).
Эта таблица заполняется в стартапе, т.е. эта секция не должна быть загружаемая, а в .elf она помечена, как
"CONTENTS, ALLOC, LOAD, DATA", отсюда и получается такой дикий .bin. Сделать секцию не загружаемой у меня не получается, пойду спрошу в форуме по gcc.
Код
avr32-size -A -x neuromatic.elf
neuromatic.elf  :
section               size         addr
.reset                 0x8   0x80000000
.text                0x418   0x80000008
.exception           0x104          0x0
.heap               0x6ef8        0x108
.stack              0x1000       0x7000
Go to the top of the page
 
+Quote Post
Maddy
сообщение Sep 15 2010, 09:35
Сообщение #5


Участник
*

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335



да , бинарник прожигается 0x80000000 ...

Код
uc3a0512-boot-072.elf  :
section              size         addr
.reset               0xc8   0x80000000
.xflash              0x42   0x800000c8
.lalign               0x6   0x8000010a
.dalign               0x4          0x4
.data                0x28          0x8
.bss                0x620         0x30
.stack              0x400        0x650
.const             0x2734       0x2000
.comment            0x1b8          0x0
.debug_aranges      0x7d8          0x0
.debug_pubnames    0x1585          0x0
.debug_info       0x10221          0x0
.debug_abbrev      0x1d4b          0x0
.debug_line        0x8430          0x0
.debug_frame       0x1384          0x0
.debug_str         0x282c          0x0
.debug_loc         0x4843          0x0
.debug_ranges      0x3a40          0x0
Total             0x2b374


и в принципе тоже основная прога лежит в раме .... lds - перекуроченый от демки uart-загрузчика из asf 2.0 ..

А как описана Ваша секция в lds ?
Go to the top of the page
 
+Quote Post
Dopler
сообщение Sep 15 2010, 10:02
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Да, действительно проблема была в том, что секция .exception включалась в бинарник.

Вот в этой теме спросил, как ее не включать, мне подсказали:
http://electronix.ru/forum/index.php?showt...mp;#entry810544

Теперь все нормально генерируется прямо из .elf, и .hex, и .bin.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:30
Рейтинг@Mail.ru


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