@@ -0,0 +1,177 @@ | |||
/** | |||
****************************************************************************** | |||
* @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) } | |||
} |
@@ -0,0 +1,177 @@ | |||
/** | |||
****************************************************************************** | |||
* @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) } | |||
} |