У меня есть сценарий использования, в котором я хочу зарезервировать настраиваемую область Flash для пользовательских данных в конце FLASH. Я не хочу, чтобы компоновщик выдавал ошибку (или, как минимум, предупреждение), если раздел кода перекрывается с областью «пользовательских данных».
Вот что я определил в своем скрипте компоновщика:
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 160K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
}
SECTIONS
{
.text :
{
*(.text)
*(.text*)
*(.glue_7)
*(.glue_7t)
*(.eh_frame)
KEEP (*(.init))
KEEP (*(.fini))
_etext = .;
} >FLASH
/* Reserved FLASH area for user data (r/w data in Flash) */
__flash_data_size__ = DEFINED(FLASH_DATA_SIZE) ? FLASH_DATA_SIZE : 0K;
.flash_data ORIGIN(FLASH) + LENGTH(FLASH) - __flash_data_size__ (NOLOAD) :
{
. = ALIGN(2048);
__flash_data_start__ = .;
. = . + __flash_data_size__;
__flash_data_end__ = .;
} >FLASH
}
Когда я определяю символ FLASH_DATA_SIZE, я вижу, что файл elf содержит раздел NOLOAD в конце Flash, как и ожидалось. Однако, если секция перекрывается с секцией кода (.text), я не получаю никакой ошибки компоновщика.
Есть идеи, почему компоновщик не жалуется на это?
В качестве альтернативы, есть ли другие идеи о том, как можно настроить настраиваемый раздел «времени компиляции» Flash, зарезервированный для пользовательских данных, который проверяется на перекрытие разделов кода?
Спасибо заранее,
Томас