diff options
Diffstat (limited to 'linker/linker_script.ld')
-rw-r--r-- | linker/linker_script.ld | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/linker/linker_script.ld b/linker/linker_script.ld new file mode 100644 index 0000000..9a9f5b3 --- /dev/null +++ b/linker/linker_script.ld @@ -0,0 +1,55 @@ +MEMORY +{ + flash : org = 0x08000000, len = 256k + sram1 : org = 0x20000000, len = 48k + sram2 : org = 0x10000000, len = 16k +} + +SECTIONS +{ + /* This is where the code goes. */ + . = ORIGIN(flash); + .text : { + *(.vectors); /* All .vector sections go here. */ + *(.text); /* All .text sections go here. */ + } >flash + + .data : { + /* Data segment as defined in the flash. */ + INIT_DATA_VALUES = LOADADDR(.data); + + /* Data segment where it will be in memory. */ + DATA_SEGMENT_START = .; + *(.data); + DATA_SEGMENT_STOP = .; + + INIT_ROUTINES_FLASH_START = + LOADADDR(.data) + (DATA_SEGMENT_STOP - DATA_SEGMENT_START); + + INITS_START = .; + *(.init0); + *(.init1); + *(.init2); + *(.init3); + *(.init4); + *(.init5); + *(.init6); + *(.init7); + INITS_END = .; + + INIT_ROUTINES_FLASH_STOP = + LOADADDR(.data) + (INITS_END - DATA_SEGMENT_START); + + /* Align by 4 so we can optimize the copier to use uint32's. */ + . = ALIGN(0x04); + + *(.noinit); + } >sram1 AT>flash + + BSS_START = .; + .bss : { + *(.bss); + . = ALIGN(0x04); + } > sram1 + BSS_END = .; +} |