/* * Filename: linker.ld * Micro-Controller: stm32f103c8t6 */ /* * Program Entry Point: * This part is put into the elf file header. */ ENTRY(Reset_Handler) /* Highest address of user mode stack */ _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0x200; /* required amount of heap. */ _Min_Stack_Size = 0x400; /* required amount of stack. */ /* * FORMAT: * R: Read only section. * W: Read/Write section. * X: Executable section. * A: Allocation section. * I: Initialized section. * !: Invert following attribute. */ /* * MEMORY Format: * name [(attr)] : ORIGIN = origin, LENGTH = len */ /* You will want to change these values to match your uC.*/ MEMORY { FLASH(rx): ORIGIN = 0x08000000, LENGTH = 64K SRAM(rwx): ORIGIN = 0x20000000, LENGTH = 20K } /* VMA: virtual memory address.*/ /* LMA: Load memory address. */ floating_point = 0; SECTIONS { /* Code section, mapped to Flash memory */ .text : { KEEP(*(.isr_vector)) /* Vector table, which must be at the beginning of Flash*/ *(.text) /* All code goes here */ *(.rodata) /* Read-only data (e.g., const vars) */ _etext = .; /* Mark the end of text section */ } > FLASH /* Initialized data section, copied from Flash to RAM on startup. */ .data : { _sdata = .; /* Start of data section */ *(.data) /* Initialized data */ _edata = .; /* End of data section */ } > RAM AT > FLASH /* BSS: Placed in SRAM memory types. */ .bss : { _sbss = .; /* */ *(.bss) /**/ *(COMMON) /**/ _ebss = .; /**/ } > RAM /* Stack Section: */ ._stack : { . = ALIGN(8); /**/ _estack = .; /**/ . = . + 2048; /**/ _sstack = .; /**/ } > RAM /* Heap Section: */ .heap : { _sheap = .; /**/ . = . + 2048; /**/ _eheap = .; /**/ } > RAM } /* Provide symbols to be used in the startup code */ PROVIDE(_stack_start = _sstack); PROVIDE(_stack_end = _estack); PROVIDE(_heap_start = _sheap); PROVIDE(_heap_end = _eheap);