/* Unused, but here to silence a linker warning. */ ENTRY(Reset_Handler) /* define memory layout */ MEMORY { FLASH_TEXT (rx) : ORIGIN = 0x00000000, LENGTH = 1024K RAM (rwx) : ORIGIN = 0x1FFF0000, LENGTH = 256K } _stack_size = 2K; /* define output sections */ SECTIONS { /* Program code and read-only data goes to FLASH_TEXT. */ .text : { /* vector table MUST start at 0x0 */ . = 0; KEEP(*(.isr_vector)) /* flash configuration MUST be at 0x400 */ . = 0x400; KEEP(*(.flash_config)) /* everything else */ *(.text) *(.text.*) *(.rodata) *(.rodata.*) . = ALIGN(4); } >FLASH_TEXT = 0xFF /* Put the stack at the bottom of RAM, so that the application will * crash on stack overflow instead of silently corrupting memory. * See: http://blog.japaric.io/stack-overflow-protection/ */ .stack (NOLOAD) : { . = ALIGN(4); . += _stack_size; _stack_top = .; } >RAM /* Start address (in flash) of .data, used by startup code. */ _sidata = LOADADDR(.data); /* this is where Teensy's LD script places .usbdescriptortable .dmabuffers .usbbuffers */ /* Globals with initial value */ .data : { . = ALIGN(4); _sdata = .; /* used by startup code */ *(.data) *(.data.*) . = ALIGN(4); _edata = .; /* used by startup code */ } >RAM AT>FLASH_TEXT /* Zero-initialized globals */ .bss : { . = ALIGN(4); _sbss = .; /* used by startup code */ *(.bss) *(.bss.*) *(COMMON) . = ALIGN(4); _ebss = .; /* used by startup code */ } >RAM /DISCARD/ : { *(.ARM.exidx) /* causes 'no memory region specified' error in lld */ *(.ARM.exidx.*) /* causes spurious 'undefined reference' errors */ } } /* For the memory allocator. */ _heap_start = _ebss; _heap_end = ORIGIN(RAM) + LENGTH(RAM); _globals_start = _sdata; _globals_end = _ebss;