Народ, столкнулся с такой проблемой. Проц SAM3U4. Там два банка флэша. Icf файл у меня такой:
CODE
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00080000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM0_start__ = 0x00080000;
define symbol __ICFEDIT_region_ROM0_end__ = 0x0009FFFF;
define symbol __ICFEDIT_region_ROM1_start__ = 0x00100000;
define symbol __ICFEDIT_region_ROM1_end__ = 0x0011FFFF;
define symbol __ICFEDIT_region_RAM1_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM1_end__ = 0x20008000;
define symbol __ICFEDIT_region_RAM2_start__ = 0x20080000;
define symbol __ICFEDIT_region_RAM2_end__ = 0x20083FFF;
define symbol __ICFEDIT_region_RAM3_start__ = 0x20100000;
define symbol __ICFEDIT_region_RAM3_end__ = 0x20101080;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x500; /*0x1000*/
define symbol __ICFEDIT_size_heap__ = 0;
define symbol __ICFEDIT_size_storage__ = 0x4000;/*0x3500; 0x3000*/
define symbol __ICFEDIT_size_nand_storage__ = 0x1080;
/**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G;
define region ROM0_region = mem:[from __ICFEDIT_region_ROM0_start__ to __ICFEDIT_region_ROM0_end__];
define region ROM1_region = mem:[from __ICFEDIT_region_ROM1_start__ to __ICFEDIT_region_ROM1_end__];
define region ROM2_region = mem:[from __ICFEDIT_region_ROM0_start__ to __ICFEDIT_region_ROM0_end__]
|mem:[from __ICFEDIT_region_ROM1_start__ to __ICFEDIT_region_ROM1_end__];
define region RAM1_region = mem:[from __ICFEDIT_region_RAM1_start__ to __ICFEDIT_region_RAM1_end__];
define region RAM2_region = mem:[from __ICFEDIT_region_RAM2_start__ to __ICFEDIT_region_RAM2_end__];
define region RAM3_region = mem:[from __ICFEDIT_region_RAM3_start__ to __ICFEDIT_region_RAM3_end__];
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
define block TempStorage with alignment = 4, size = __ICFEDIT_size_storage__ { };
define block NandStorage with alignment = 4, size = __ICFEDIT_size_nand_storage__ { };
initialize by copy { readwrite };
do not initialize { section .noinit };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM2_region { readonly };
place in RAM1_region { readwrite, block CSTACK, block HEAP };
place in RAM2_region { block TempStorage };
place in RAM3_region { block NandStorage };
Столкнулся с такой проблемой. В определенный момент времени стал получать при компиляции такую радость:
"TApplication.cpp
Tool Internal Error:
Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 007ADD2E (reading from address 0x0)"
Посмотрел мап файл еще компилящегося проекта - там класс TApplication.cpp расположен вконце второго банка флеша.
Дописываю пару строчек кода, размер класса увеличивается и не влазит во флеш. Но размер класса таков,
что запросто может поместиться в первом банке флеша, и места там хватает с лихвой. Два вопроса собственно: какова... и как исправить?
Руками размещать код класса по определенному адресу не хочется (я и не знаю как), хотелось бы что бы линкер это дело разруливал!
Временно решил проблему путем максимальной оптимизации по размеру, но это не выход, ибо оптимизация для меня, скажем так, по религиозным причинам не канает впринципе.
Может у меня icf файл "неправильный" или опции линкера какието особые есть на такой случай?
Сообщение отредактировал IgorKossak - Jul 18 2012, 20:55