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

 
 
 
Reply to this topicStart new topic
> IAR структура выходного файла. Память под кучу.
srm
сообщение May 23 2010, 13:58
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501



Написал небольшую программку для at91sam7s256 на IAR. Кода там немного ~ 10Кб. Результирующий out файл весит ~70Кб. Дизассмблировал - оказалось, что большую часть файла занимает куча:

Код
P2:00100000; Segment type: Uninitialized
P2:00100000                 AREA P2, DATA, ALIGN=3
P2:00100000                ; ORG 0x100000
P2:00100000                 EXPORT HEAP$$Base
P2:00100000 HEAP$$Base      % 1                    ; DATA XREF: __aeabi_dmul+30o
P2:00100000                                        ; __aeabi_dmul+A4o ...
P2:00100001                 % 1
...
P2:00109FFF                 % 1
P2:0010A000 DtorRecArray    % 0xC                  ; DATA XREF: P1:off_23D8o
P2:0010A000                                        ; P1:off_26A8o ...
P2:0010A000                                        ; Alternative name is 'CSTACK$$Limit'
P2:0010A00C      P2:0010A00C                 % 1
...
т.е. куча под кучу отводится 0x10000 октетов. Но у меня в конфиге указан размер кучи 0x1000:

Код
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x100000;
define symbol __ICFEDIT_region_ROM_end__     = 0x13FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x200000;
define symbol __ICFEDIT_region_RAM_end__     = 0x20FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_startup__  = 0x100;
define symbol __ICFEDIT_size_vectors__  = 0x100;
define symbol __ICFEDIT_size_cstack__   = 0x400;
define symbol __ICFEDIT_size_sysstack__ = 0x80;
define symbol __ICFEDIT_size_irqstack__ = 0x80;
define symbol __ICFEDIT_size_heap__     = 0x1000;
/*-Exports-*/
export symbol __ICFEDIT_region_ROM_start__;
export symbol __ICFEDIT_region_ROM_end__;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
export symbol __ICFEDIT_size_startup__;
export symbol __ICFEDIT_size_vectors__;
export symbol __ICFEDIT_size_cstack__;
export symbol __ICFEDIT_size_sysstack__;
export symbol __ICFEDIT_size_irqstack__;
export symbol __ICFEDIT_size_heap__;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region STA_region = mem:[from __ICFEDIT_region_ROM_start__ size __ICFEDIT_size_startup__];
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_ROM_end__];
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
initialize by copy { section .vectors };
do not initialize  { section .noinit };

place in STA_region { section .cstartup };
place in ROM_region { readonly };
place in VEC_region { section .vectors };
place in RAM_region { readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };

почему куча получается такой большой?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 23 2010, 14:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(srm @ May 23 2010, 15:58) *
Дизассмблировал - оказалось, что большую часть файла занимает куча:

Не знаю, то там увидели,но heap ни сном ни духом к ROM не имеет отношения. Просто смотрите map файл - там все увидите.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
srm
сообщение May 23 2010, 14:22
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501



Цитата
Не знаю, то там увидели,но heap ни сном ни духом к ROM не имеет отношения. Просто смотрите map файл - там все увидите.
То, что я увидел, я привёл в своём первом сообщении. Вот сам исполняемый файл Прикрепленный файл  stl_test.rar ( 9.1 килобайт ) Кол-во скачиваний: 102
. В elf файле хранится информация не только о содержимом ROM.

Меня, конечно, размер самого elf файла не беспокоит. Вот, просто на дебаге размер elf файлика получается 420 Кб. Кода там 20 Кб. Что занимает остальные 400 Кб? По видимому, отладочная информация. В релизе её нет. Код занимает 10 Кб, elf файлик весит 70 Кб. Что там занимает остальные 60 Кб?

Сообщение отредактировал srm - May 23 2010, 14:36
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 23 2010, 16:49
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(srm @ May 23 2010, 16:22) *
Что там занимает остальные 60 Кб?

Формат ELF открытый - можете учитаться на досуге http://www.skyfree.org/linux/references/ELF_Format.pdf . Непосредственно в микроконтроллер ELF не грузится. Повторяю еще раз - где, чего и сколько это MAP. Преобразованиями занимаются 'binutils' - сделайте бинарник (у IAR ieltool.exe )- получите 11444 байта.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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