Я пытаюсь поместить некоторые переменные в определенную ROM-линию.
В файле конфигурации компоновщика:
define symbol __ICFEDIT_region_APP_ROM_start__ = 0x08070000 ;
define symbol __ICFEDIT_region_APP_ROM_end__ = 0x0807FFFF;
define region APP_ROM_region = mem:[from __ICFEDIT_region_APP_ROM_start__ to __ICFEDIT_region_APP_ROM_end__];
place in APP_ROM_region { readonly section test_data};
В исходном файле:
#pragma default_variable_attributes = @ "test_data"
const U8 testVar8 = 0;
const U8 testArray512[512];
const uint32_t testVar32 = 0x1234ABCD;
const U8 testArray500[500];
#pragma default_variable_attributes =
Сгенерированный файл .map:
test_data const 0x08070000 0x200 source_file.o [1]
test_data const 0x08070200 0x1f4 source_file.o [1]
test_data const 0x080703f4 0x4 source_file.o [1]
test_data const 0x080703f8 0x1 source_file.o [1]
testArray512 0x08070000 0x200 Data Gb source_file.o [1]
testArray500 0x08070200 0x1f4 Data Gb source_file.o [1]
testVar32 0x080703f4 0x4 Data Gb source_file.o [1]
testVar8 0x080703f8 0x1 Data Gb source_file.o [1]
У всех работает - переменные находятся в правильном разделе.
Но компоновщик навел порядок из-за размера переменных.
Есть ли способ сказать компоновщику не изменять порядок переменных, чтобы они отображались в файле карты в том же порядке, в котором они объявлены в исходном файле?
Цель:
testArray8 0x08070000 0x1 Data Gb source_file.o [1]
testArray512 0x08070001 0x200 Data Gb source_file.o [1]
testVar32 0x08070201 0x4 Data Gb source_file.o [1]
testVar500 0x08070205 0x1f4 Data Gb source_file.o [1]
struct
? - person KamilCuk   schedule 09.04.2020struct
s. -- Компоновщик достаточно умен, чтобы сначала поместить самый большой объект, чтобы найти хорошее решение. Он может иметь или не иметь возможность изменить это поведение. Вы прочитали все его руководство? И вы спросили IAR, кто предоставил инструмент? - person the busybee   schedule 09.04.2020