116 lines
No EOL
3.5 KiB
Text
116 lines
No EOL
3.5 KiB
Text
/*
|
|
* Линкер-скрипт для STM32F446RETx (512K FLASH, 128K RAM)
|
|
* Смещение FLASH: 0x08008000 (первые 32K под загрузчик)
|
|
*/
|
|
|
|
/* Точка входа */
|
|
ENTRY(Reset_Handler)
|
|
|
|
/* Конец стека (адрес начала стека = конец RAM) */
|
|
_estack = ORIGIN(RAM) + LENGTH(RAM);
|
|
|
|
/* Минимальные размеры кучи и стека */
|
|
_Min_Heap_Size = 0x1000; /* 4 КБ */
|
|
_Min_Stack_Size = 0x2000; /* 8 КБ */
|
|
|
|
/* Распределение памяти */
|
|
MEMORY {
|
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
|
|
FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 384K # Для STM32F446 (512K - 32K)
|
|
}
|
|
|
|
/* Секции */
|
|
SECTIONS {
|
|
/* Векторы прерываний (должны быть первыми!) */
|
|
.isr_vector : {
|
|
. = ALIGN(4);
|
|
KEEP(*(.isr_vector)) /* Секция векторов */
|
|
. = ALIGN(4);
|
|
} >FLASH
|
|
|
|
/* Программный код и константы */
|
|
.text : {
|
|
. = ALIGN(4);
|
|
*(.text) /* Код */
|
|
*(.text*) /* Код (включая C++) */
|
|
*(.glue_7) /* ARM/Thumb glue */
|
|
*(.glue_7t) /* Thumb/ARM glue */
|
|
*(.eh_frame)
|
|
|
|
KEEP(*(.init)) /* Конструкторы */
|
|
KEEP(*(.fini)) /* Деструкторы */
|
|
|
|
. = ALIGN(4);
|
|
_etext = .; /* Конец кода */
|
|
} >FLASH
|
|
|
|
/* Константы (только для чтения) */
|
|
.rodata : {
|
|
. = ALIGN(4);
|
|
*(.rodata) /* Константы */
|
|
*(.rodata*) /* Константы (включая строки) */
|
|
. = ALIGN(4);
|
|
} >FLASH
|
|
|
|
/* Таблицы для C++ (исключения, RTTI) */
|
|
.ARM.extab : {
|
|
. = ALIGN(4);
|
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
. = ALIGN(4);
|
|
} >FLASH
|
|
|
|
.ARM.exidx : {
|
|
. = ALIGN(4);
|
|
__exidx_start = .;
|
|
*(.ARM.exidx*)
|
|
__exidx_end = .;
|
|
. = ALIGN(4);
|
|
} >FLASH
|
|
|
|
/* Инициализированные данные (копируются в RAM при старте) */
|
|
_sidata = LOADADDR(.data); /* Адрес данных во FLASH */
|
|
|
|
.data : {
|
|
. = ALIGN(4);
|
|
_sdata = .; /* Начало данных в RAM */
|
|
*(.data) /* Инициализированные переменные */
|
|
*(.data*) /* Инициализированные переменные (C++) */
|
|
*(.RamFunc) /* Функции в RAM */
|
|
*(.RamFunc*) /* Функции в RAM (C++) */
|
|
. = ALIGN(4);
|
|
_edata = .; /* Конец данных в RAM */
|
|
} >RAM AT> FLASH /* Физически хранятся во FLASH */
|
|
|
|
/* Неинициализированные данные (BSS) */
|
|
.bss : {
|
|
. = ALIGN(4);
|
|
_sbss = .; /* Начало BSS */
|
|
__bss_start__ = _sbss;
|
|
*(.bss) /* BSS переменные */
|
|
*(.bss*) /* BSS переменные (C++) */
|
|
*(COMMON) /* Общие переменные */
|
|
. = ALIGN(4);
|
|
_ebss = .; /* Конец BSS */
|
|
__bss_end__ = _ebss;
|
|
} >RAM
|
|
|
|
/* Куча и стек (резервируем место) */
|
|
._user_heap_stack : {
|
|
. = ALIGN(8);
|
|
PROVIDE(end = .);
|
|
PROVIDE(_end = .);
|
|
. = . + _Min_Heap_Size;
|
|
. = . + _Min_Stack_Size;
|
|
. = ALIGN(8);
|
|
} >RAM
|
|
|
|
/* Удаление ненужных секций из стандартных библиотек */
|
|
/DISCARD/ : {
|
|
libc.a (*)
|
|
libm.a (*)
|
|
libgcc.a (*)
|
|
}
|
|
|
|
/* Атрибуты ARM */
|
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
} |