8f1eced69d
USB serial is now working for F7. Internal file storage is now working for F7. The flash is laid out a bit differently to the F4 - 4 x 32K, 1 x 128K with the rest 256K, so the internal storage is 96K. Added more pind definitions for STM32F7DISC board. Made USART1 be the default HWUART repl. The STLINK usb connector also looks like a USB serial port which is attached to USART1 on the STM32F7DISC.
138 lines
4.0 KiB
Plaintext
138 lines
4.0 KiB
Plaintext
/*
|
|
GNU linker script for STM32F405
|
|
*/
|
|
|
|
/* Specify the memory areas */
|
|
MEMORY
|
|
{
|
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
|
|
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 32K /* sector 0, 32K */
|
|
FLASH_FS (r) : ORIGIN = 0x08008000, LENGTH = 96K /* sectors 1, 2, 3 (32K each) */
|
|
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 896K /* sectors 4-7 1*128Kib 3*256KiB = 896K */
|
|
DTCM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K /* Used for storage cache */
|
|
RAM (xrw) : ORIGIN = 0x20010000, LENGTH = 256K /* SRAM1 = 240K, SRAM2 = 16K */
|
|
}
|
|
|
|
ENTRY(Reset_Handler)
|
|
|
|
/* produce a link error if there is not this amount of RAM for these sections */
|
|
_minimum_stack_size = 2K;
|
|
_minimum_heap_size = 16K;
|
|
|
|
/* Define tho top end of the stack. The stack is full descending so begins just
|
|
above last byte of RAM. Note that EABI requires the stack to be 8-byte
|
|
aligned for a call. */
|
|
_estack = ORIGIN(RAM) + LENGTH(RAM);
|
|
|
|
/* RAM extents for the garbage collector */
|
|
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
|
|
_heap_end = 0x2004c000; /* tunable */
|
|
|
|
/* define output sections */
|
|
SECTIONS
|
|
{
|
|
/* The startup code goes first into FLASH */
|
|
.isr_vector :
|
|
{
|
|
. = ALIGN(4);
|
|
KEEP(*(.isr_vector)) /* Startup code */
|
|
|
|
/* This first flash block is 16K annd the isr vectors only take up
|
|
about 400 bytes. So we pull in a couple of object files to pad it
|
|
out. */
|
|
|
|
. = ALIGN(4);
|
|
*/ff.o(.text*)
|
|
*/stm32f4xx_hal_sd.o(.text*)
|
|
|
|
. = ALIGN(4);
|
|
} >FLASH_ISR
|
|
|
|
/* The program code and other data goes into FLASH */
|
|
.text :
|
|
{
|
|
. = ALIGN(4);
|
|
*(.text*) /* .text* sections (code) */
|
|
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
/* *(.glue_7) */ /* glue arm to thumb code */
|
|
/* *(.glue_7t) */ /* glue thumb to arm code */
|
|
|
|
. = ALIGN(4);
|
|
_etext = .; /* define a global symbol at end of code */
|
|
} >FLASH_TEXT
|
|
|
|
/*
|
|
.ARM.extab :
|
|
{
|
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
} >FLASH
|
|
|
|
.ARM :
|
|
{
|
|
__exidx_start = .;
|
|
*(.ARM.exidx*)
|
|
__exidx_end = .;
|
|
} >FLASH
|
|
*/
|
|
|
|
/* used by the startup to initialize data */
|
|
_sidata = LOADADDR(.data);
|
|
|
|
/* This is the initialized data section
|
|
The program executes knowing that the data is in the RAM
|
|
but the loader puts the initial values in the FLASH (inidata).
|
|
It is one task of the startup to copy the initial values from FLASH to RAM. */
|
|
.data :
|
|
{
|
|
. = ALIGN(4);
|
|
_sdata = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */
|
|
_ram_start = .; /* create a global symbol at ram start for garbage collector */
|
|
*(.data*) /* .data* sections */
|
|
|
|
. = ALIGN(4);
|
|
_edata = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */
|
|
} >RAM AT> FLASH_TEXT
|
|
|
|
/* Uninitialized data section */
|
|
.bss :
|
|
{
|
|
. = ALIGN(4);
|
|
_sbss = .; /* define a global symbol at bss start; used by startup code */
|
|
*(.bss*)
|
|
*(COMMON)
|
|
|
|
. = ALIGN(4);
|
|
_ebss = .; /* define a global symbol at bss end; used by startup code and GC */
|
|
} >RAM
|
|
|
|
/* this is to define the start of the heap, and make sure we have a minimum size */
|
|
.heap :
|
|
{
|
|
. = ALIGN(4);
|
|
PROVIDE ( end = . );
|
|
PROVIDE ( _end = . );
|
|
_heap_start = .; /* define a global symbol at heap start */
|
|
. = . + _minimum_heap_size;
|
|
} >RAM
|
|
|
|
/* this just checks there is enough RAM for the stack */
|
|
.stack :
|
|
{
|
|
. = ALIGN(4);
|
|
. = . + _minimum_stack_size;
|
|
. = ALIGN(4);
|
|
} >RAM
|
|
|
|
/* Remove information from the standard libraries */
|
|
/*
|
|
/DISCARD/ :
|
|
{
|
|
libc.a ( * )
|
|
libm.a ( * )
|
|
libgcc.a ( * )
|
|
}
|
|
*/
|
|
|
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
}
|