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 ALIGN(0x100) : { *(.vectors); /* All .vector sections go here. */ *(.text); /* All .text sections go here. */ } >flash .data : ALIGN(0x04) { /* Data segment as defined in the flash. */ INIT_DATA_VALUES = LOADADDR(.data); /* Data segment where it will be in memory. */ . = ALIGN(0x04); DATA_SEGMENT_START = .; *(.data); DATA_SEGMENT_STOP = .; INIT_ROUTINES_FLASH_START = LOADADDR(.data) + (DATA_SEGMENT_STOP - DATA_SEGMENT_START); INITS_START = .; *(.init0); INIT_0_END = LOADADDR(.data) + (. - INITS_START); *(.init1); INIT_1_END = LOADADDR(.data) + (. - INITS_START); *(.init2); INIT_2_END = LOADADDR(.data) + (. - INITS_START); *(.init3); INIT_3_END = LOADADDR(.data) + (. - INITS_START); *(.init4); INIT_4_END = LOADADDR(.data) + (. - INITS_START); *(.init5); INIT_5_END = LOADADDR(.data) + (. - INITS_START); *(.init6); INIT_6_END = LOADADDR(.data) + (. - INITS_START); *(.init7); INIT_7_END = LOADADDR(.data) + (. - INITS_START); 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 . = ALIGN(0x04); BSS_START = .; .bss : { *(.bss); . = ALIGN(0x04); } > sram1 BSS_END = .; HEAP_START = .; HEAP_STOP = ORIGIN(sram1) + LENGTH(sram1); }