|
Выполнение кода из ОЗУ, как задать области, которые туда копировать не нужно |
|
|
|
Apr 18 2018, 12:53
|
Группа: Участник
Сообщений: 11
Регистрация: 1-11-15
Пользователь №: 89 126

|
Реализовал выполнение кода из ОЗУ на STM32, отредактировав .icf файл. Вопрос в следующем: у меня в коде присутствует большой константный массив данных (картинка). Как мне сказать компилятору, чтобы он не копировал её в оперативку и не забивал память почем зря?
|
|
|
|
|
 |
Ответов
|
Apr 18 2018, 14:05
|
Группа: Участник
Сообщений: 11
Регистрация: 1-11-15
Пользователь №: 89 126

|
Цитата(jcxz @ Apr 18 2018, 14:09)  Перенести этот массив во FLASH-регион описанный в .icf. Вот я и пытаюсь понять, как это сделать, чтобы не копировалось. Пробовал, например, #pragma location = ".rodata", не помогает .icf файл.: Код /*###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__ = 0x08000000; /*-Memory Regions-*/ define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x00000000; define symbol __ICFEDIT_region_RAM_end__ = 0x0002FFFF; define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000; define symbol __ICFEDIT_region_CCMRAM_end__ = 0x1000FFFF; /*-Sizes-*/ define symbol __ICFEDIT_size_cstack__ = 0x2000; define symbol __ICFEDIT_size_heap__ = 0x2000; /**** End of ICF editor section. ###ICF###*/
/* intvec location in RAM after remapping in SystemInit */ define symbol RAM_intvec_start = 0x00000000;
define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define region CCMRAM_region = mem:[from __ICFEDIT_region_CCMRAM_start__ to __ICFEDIT_region_CCMRAM_end__];
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
initialize by copy { readonly, readwrite };
do not initialize { section .noinit };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place at address mem:RAM_intvec_start { section .intvec_RAM }; /*place at address mem:RAM_intvec_start { readonly section .intvec };*/
place in ROM_region { readonly }; place in RAM_region { readwrite }; place in CCMRAM_region { section .ccmram, block CSTACK, block HEAP };
|
|
|
|
Сообщений в этой теме
AlphaLaiman Выполнение кода из ОЗУ Apr 18 2018, 12:53 AlphaLaiman Попробовал, результат следующий: в отладчике масси... Apr 18 2018, 14:35 jcxz Цитата(AlphaLaiman @ Apr 18 2018, 17:35) ... Apr 18 2018, 15:50 VladislavS Предлагаю заглянуть в .map файл. Apr 18 2018, 15:49 AlphaLaiman Цитата(jcxz @ Apr 18 2018, 16:50) Так ищи... Apr 18 2018, 16:00 jcxz Цитата(AlphaLaiman @ Apr 18 2018, 19:00) ... Apr 18 2018, 16:14 AlphaLaiman Но я ведь вроде все также сделал, как у Вас. Может... Apr 18 2018, 16:32 VladislavS Кодinitialize by copy { readonly, readwrite };
Нич... Apr 18 2018, 16:35 AlphaLaiman Цитата(VladislavS @ Apr 18 2018, 17:35) К... Apr 18 2018, 16:43 jcxz Цитата(AlphaLaiman @ Apr 18 2018, 19:43) ... Apr 18 2018, 16:52 VladislavS Кодinitialize by copy { readonly, readwrite } exce... Apr 18 2018, 17:09 jcxz Цитата(VladislavS @ Apr 18 2018, 20:09) Н... Apr 18 2018, 22:00  VladislavS Цитата(jcxz @ Apr 19 2018, 01:00) initial... Apr 19 2018, 01:24 VladislavS Кстати, вопрос топикстартеру. Зачем вы код в RAM ... Apr 19 2018, 04:58 AlphaLaiman Цитата(VladislavS @ Apr 18 2018, 17:09) C... Apr 19 2018, 06:57 scifi Как-то раз делал загрузчик. Для того чтобы он мог ... Apr 19 2018, 07:18 jcxz Цитата(scifi @ Apr 19 2018, 10:18) Единст... Apr 19 2018, 08:02 VladislavS Понятно, особенность синхронизации шин. Apr 19 2018, 07:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|