Я работаю над чипом cortex-m3. Пространство стека было зарезервировано в исходном коде с неинициализированным массивом в секции bss. Сценарий линкера я использовал следующий образ:Как я могу сделать пустой раздел с GNU ld?
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256k
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64k
}
SECTIONS {
.text : {
KEEP(*(.isr_vector))
*(.text*)
*(.rodata*)
__text_end = .;
} >FLASH
.data : {
__data_start = .;
*(.data*)
__data_end = .;
} >SRAM AT>FLASH
.bss : {
__bss_start = .;
*(.bss*)
__bss_end = .;
} >SRAM
}
Я пытаюсь выделить раздел для стека в начале области SRAM так, чтобы я мог обнаружить переполнение стека с использованием ошибкой.
Я добавил раздел под названием .stack:
SECTIONS {
.text : {
:
} >FLASH
.stack : {
__stack_size = 4k;
__stack_start = .;
. = . + __stack_size;
. = ALIGN(8); /* cortex-m3 uses full-descending stack aligned with 8 bytes */
__stack_end = .;
} >SRAM
.data : {
:
} >SRAM AT>FLASH
.bss : {
:
} >SRAM
}
Linking делается без каких-либо ошибок или предупреждений, но проблема в том, что __stack_end не на область памяти SRAM, а на области FLASH.
Я знаю, что могу использовать отдельный раздел с __attribute __ ((раздел («имя»))), но я думаю, было бы лучше, если бы я мог справиться с ним в сценарии компоновщика.
Как я могу сделать пустой раздел в области SRAM?