В программе для микроконтроллера некоторые регионы должны находиться в специальном разделе памяти.Они были объявлены в исходном файле C как
static int Foo __attribute__((section(".ocm")));
В скрипте компоновщика этот раздел размещен по соответствующему адресу:
MEMORY {
ram_0 : ORIGIN = 0, LENGTH = 0x100000
ram_1 : ORIGIN = 0xFFFF0000, LENGTH = 0xFE00
}
SECTION {
.text : {
// here are the normal sections
} > ram_0
.ocm (NOLOAD) : {
__ocm_start = .;
*(.ocm)
__osm_end = .;
} > ram_1
}
При такой конфигурации все символы включены вфайл карты.Но переменная Foo
отсутствует.Атрибут NOLOAD можно применять, поскольку в этом разделе нет инициализированных переменных.Это было необходимо, поскольку вывод ELF подвергается последующей обработке, и этот раздел должен быть исключен из этого процесса.
Как убедить компоновщика включить символы в специальный раздел в файле карты?