/** | |||||
****************************************************************************** | |||||
* @file LinkerScript.ld | |||||
* @author Auto-generated by STM32CubeIDE | |||||
* Abstract : Linker script for NUCLEO-F401RE Board embedding STM32F401RETx Device from stm32f4 series | |||||
* 512Kbytes FLASH | |||||
* 96Kbytes RAM | |||||
* | |||||
* Set heap size, stack size and stack location according | |||||
* to application requirements. | |||||
* | |||||
* Set memory bank area and size if external memory is used | |||||
****************************************************************************** | |||||
* @attention | |||||
* | |||||
* <h2><center>© Copyright (c) 2020 STMicroelectronics. | |||||
* All rights reserved.</center></h2> | |||||
* | |||||
* This software component is licensed by ST under BSD 3-Clause license, | |||||
* the "License"; You may not use this file except in compliance with the | |||||
* License. You may obtain a copy of the License at: | |||||
* opensource.org/licenses/BSD-3-Clause | |||||
* | |||||
****************************************************************************** | |||||
*/ | |||||
/* Entry Point */ | |||||
ENTRY(Reset_Handler) | |||||
/* Highest address of the user mode stack */ | |||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ | |||||
_Min_Heap_Size = 0x200 ; /* required amount of heap */ | |||||
_Min_Stack_Size = 0x400 ; /* required amount of stack */ | |||||
/* Memories definition */ | |||||
MEMORY | |||||
{ | |||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K | |||||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K | |||||
} | |||||
/* Sections */ | |||||
SECTIONS | |||||
{ | |||||
/* The startup code into "FLASH" Rom type memory */ | |||||
.isr_vector : | |||||
{ | |||||
. = ALIGN(4); | |||||
KEEP(*(.isr_vector)) /* Startup code */ | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
/* The program code and other data into "FLASH" Rom type memory */ | |||||
.text : | |||||
{ | |||||
. = ALIGN(4); | |||||
*(.text) /* .text sections (code) */ | |||||
*(.text*) /* .text* sections (code) */ | |||||
*(.glue_7) /* glue arm to thumb code */ | |||||
*(.glue_7t) /* glue thumb to arm code */ | |||||
*(.eh_frame) | |||||
KEEP (*(.init)) | |||||
KEEP (*(.fini)) | |||||
. = ALIGN(4); | |||||
_etext = .; /* define a global symbols at end of code */ | |||||
} >FLASH | |||||
/* Constant data into "FLASH" Rom type memory */ | |||||
.rodata : | |||||
{ | |||||
. = ALIGN(4); | |||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */ | |||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */ | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
.ARM.extab : { | |||||
. = ALIGN(4); | |||||
*(.ARM.extab* .gnu.linkonce.armextab.*) | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
.ARM : { | |||||
. = ALIGN(4); | |||||
__exidx_start = .; | |||||
*(.ARM.exidx*) | |||||
__exidx_end = .; | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
.preinit_array : | |||||
{ | |||||
. = ALIGN(4); | |||||
PROVIDE_HIDDEN (__preinit_array_start = .); | |||||
KEEP (*(.preinit_array*)) | |||||
PROVIDE_HIDDEN (__preinit_array_end = .); | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
.init_array : | |||||
{ | |||||
. = ALIGN(4); | |||||
PROVIDE_HIDDEN (__init_array_start = .); | |||||
KEEP (*(SORT(.init_array.*))) | |||||
KEEP (*(.init_array*)) | |||||
PROVIDE_HIDDEN (__init_array_end = .); | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
.fini_array : | |||||
{ | |||||
. = ALIGN(4); | |||||
PROVIDE_HIDDEN (__fini_array_start = .); | |||||
KEEP (*(SORT(.fini_array.*))) | |||||
KEEP (*(.fini_array*)) | |||||
PROVIDE_HIDDEN (__fini_array_end = .); | |||||
. = ALIGN(4); | |||||
} >FLASH | |||||
/* Used by the startup to initialize data */ | |||||
_sidata = LOADADDR(.data); | |||||
/* Initialized data sections into "RAM" Ram type memory */ | |||||
.data : | |||||
{ | |||||
. = ALIGN(4); | |||||
_sdata = .; /* create a global symbol at data start */ | |||||
*(.data) /* .data sections */ | |||||
*(.data*) /* .data* sections */ | |||||
*(.RamFunc) /* .RamFunc sections */ | |||||
*(.RamFunc*) /* .RamFunc* sections */ | |||||
. = ALIGN(4); | |||||
_edata = .; /* define a global symbol at data end */ | |||||
} >RAM AT> FLASH | |||||
/* Uninitialized data section into "RAM" Ram type memory */ | |||||
. = ALIGN(4); | |||||
.bss : | |||||
{ | |||||
/* This is used by the startup in order to initialize the .bss section */ | |||||
_sbss = .; /* define a global symbol at bss start */ | |||||
__bss_start__ = _sbss; | |||||
*(.bss) | |||||
*(.bss*) | |||||
*(COMMON) | |||||
. = ALIGN(4); | |||||
_ebss = .; /* define a global symbol at bss end */ | |||||
__bss_end__ = _ebss; | |||||
} >RAM | |||||
/* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ | |||||
._user_heap_stack : | |||||
{ | |||||
. = ALIGN(8); | |||||
PROVIDE ( end = . ); | |||||
PROVIDE ( _end = . ); | |||||
. = . + _Min_Heap_Size; | |||||
. = . + _Min_Stack_Size; | |||||
. = ALIGN(8); | |||||
} >RAM | |||||
/* Remove information from the compiler libraries */ | |||||
/DISCARD/ : | |||||
{ | |||||
libc.a ( * ) | |||||
libm.a ( * ) | |||||
libgcc.a ( * ) | |||||
} | |||||
.ARM.attributes 0 : { *(.ARM.attributes) } | |||||
} |
/** | |||||
****************************************************************************** | |||||
* @file LinkerScript.ld | |||||
* @author Auto-generated by STM32CubeIDE | |||||
* Abstract : Linker script for NUCLEO-F401RE Board embedding STM32F401RETx Device from stm32f4 series | |||||
* 512Kbytes FLASH | |||||
* 96Kbytes RAM | |||||
* | |||||
* Set heap size, stack size and stack location according | |||||
* to application requirements. | |||||
* | |||||
* Set memory bank area and size if external memory is used | |||||
****************************************************************************** | |||||
* @attention | |||||
* | |||||
* <h2><center>© Copyright (c) 2020 STMicroelectronics. | |||||
* All rights reserved.</center></h2> | |||||
* | |||||
* This software component is licensed by ST under BSD 3-Clause license, | |||||
* the "License"; You may not use this file except in compliance with the | |||||
* License. You may obtain a copy of the License at: | |||||
* opensource.org/licenses/BSD-3-Clause | |||||
* | |||||
****************************************************************************** | |||||
*/ | |||||
/* Entry Point */ | |||||
ENTRY(Reset_Handler) | |||||
/* Highest address of the user mode stack */ | |||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ | |||||
_Min_Heap_Size = 0x200; /* required amount of heap */ | |||||
_Min_Stack_Size = 0x400; /* required amount of stack */ | |||||
/* Memories definition */ | |||||
MEMORY | |||||
{ | |||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K | |||||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K | |||||
} | |||||
/* Sections */ | |||||
SECTIONS | |||||
{ | |||||
/* The startup code into "RAM" Ram type memory */ | |||||
.isr_vector : | |||||
{ | |||||
. = ALIGN(4); | |||||
KEEP(*(.isr_vector)) /* Startup code */ | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
/* The program code and other data into "RAM" Ram type memory */ | |||||
.text : | |||||
{ | |||||
. = ALIGN(4); | |||||
*(.text) /* .text sections (code) */ | |||||
*(.text*) /* .text* sections (code) */ | |||||
*(.glue_7) /* glue arm to thumb code */ | |||||
*(.glue_7t) /* glue thumb to arm code */ | |||||
*(.eh_frame) | |||||
*(.RamFunc) /* .RamFunc sections */ | |||||
*(.RamFunc*) /* .RamFunc* sections */ | |||||
KEEP (*(.init)) | |||||
KEEP (*(.fini)) | |||||
. = ALIGN(4); | |||||
_etext = .; /* define a global symbols at end of code */ | |||||
} >RAM | |||||
/* Constant data into "RAM" Ram type memory */ | |||||
.rodata : | |||||
{ | |||||
. = ALIGN(4); | |||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */ | |||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */ | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
.ARM.extab : { | |||||
. = ALIGN(4); | |||||
*(.ARM.extab* .gnu.linkonce.armextab.*) | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
.ARM : { | |||||
. = ALIGN(4); | |||||
__exidx_start = .; | |||||
*(.ARM.exidx*) | |||||
__exidx_end = .; | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
.preinit_array : | |||||
{ | |||||
. = ALIGN(4); | |||||
PROVIDE_HIDDEN (__preinit_array_start = .); | |||||
KEEP (*(.preinit_array*)) | |||||
PROVIDE_HIDDEN (__preinit_array_end = .); | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
.init_array : | |||||
{ | |||||
. = ALIGN(4); | |||||
PROVIDE_HIDDEN (__init_array_start = .); | |||||
KEEP (*(SORT(.init_array.*))) | |||||
KEEP (*(.init_array*)) | |||||
PROVIDE_HIDDEN (__init_array_end = .); | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
.fini_array : | |||||
{ | |||||
. = ALIGN(4); | |||||
PROVIDE_HIDDEN (__fini_array_start = .); | |||||
KEEP (*(SORT(.fini_array.*))) | |||||
KEEP (*(.fini_array*)) | |||||
PROVIDE_HIDDEN (__fini_array_end = .); | |||||
. = ALIGN(4); | |||||
} >RAM | |||||
/* Used by the startup to initialize data */ | |||||
_sidata = LOADADDR(.data); | |||||
/* Initialized data sections into "RAM" Ram type memory */ | |||||
.data : | |||||
{ | |||||
. = ALIGN(4); | |||||
_sdata = .; /* create a global symbol at data start */ | |||||
*(.data) /* .data sections */ | |||||
*(.data*) /* .data* sections */ | |||||
. = ALIGN(4); | |||||
_edata = .; /* define a global symbol at data end */ | |||||
} >RAM | |||||
/* Uninitialized data section into "RAM" Ram type memory */ | |||||
. = ALIGN(4); | |||||
.bss : | |||||
{ | |||||
/* This is used by the startup in order to initialize the .bss section */ | |||||
_sbss = .; /* define a global symbol at bss start */ | |||||
__bss_start__ = _sbss; | |||||
*(.bss) | |||||
*(.bss*) | |||||
*(COMMON) | |||||
. = ALIGN(4); | |||||
_ebss = .; /* define a global symbol at bss end */ | |||||
__bss_end__ = _ebss; | |||||
} >RAM | |||||
/* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */ | |||||
._user_heap_stack : | |||||
{ | |||||
. = ALIGN(8); | |||||
PROVIDE ( end = . ); | |||||
PROVIDE ( _end = . ); | |||||
. = . + _Min_Heap_Size; | |||||
. = . + _Min_Stack_Size; | |||||
. = ALIGN(8); | |||||
} >RAM | |||||
/* Remove information from the compiler libraries */ | |||||
/DISCARD/ : | |||||
{ | |||||
libc.a ( * ) | |||||
libm.a ( * ) | |||||
libgcc.a ( * ) | |||||
} | |||||
.ARM.attributes 0 : { *(.ARM.attributes) } | |||||
} |