EL4121 Embedded System / mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 /* Linker script to configure memory regions. */
be_bryan 0:b74591d5ab33 2 MEMORY
be_bryan 0:b74591d5ab33 3 {
be_bryan 0:b74591d5ab33 4 FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K
be_bryan 0:b74591d5ab33 5 RAM (rwx) : ORIGIN = 0x200001F8, LENGTH = 512K - 0x1F8
be_bryan 0:b74591d5ab33 6 }
be_bryan 0:b74591d5ab33 7
be_bryan 0:b74591d5ab33 8 /* Linker script to place sections and symbol values. Should be used together
be_bryan 0:b74591d5ab33 9 * with other linker script that defines memory regions FLASH and RAM.
be_bryan 0:b74591d5ab33 10 * It references following symbols, which must be defined in code:
be_bryan 0:b74591d5ab33 11 * Reset_Handler : Entry of reset handler
be_bryan 0:b74591d5ab33 12 *
be_bryan 0:b74591d5ab33 13 * It defines following symbols, which code can use without definition:
be_bryan 0:b74591d5ab33 14 * __exidx_start
be_bryan 0:b74591d5ab33 15 * __exidx_end
be_bryan 0:b74591d5ab33 16 * __etext
be_bryan 0:b74591d5ab33 17 * __data_start__
be_bryan 0:b74591d5ab33 18 * __preinit_array_start
be_bryan 0:b74591d5ab33 19 * __preinit_array_end
be_bryan 0:b74591d5ab33 20 * __init_array_start
be_bryan 0:b74591d5ab33 21 * __init_array_end
be_bryan 0:b74591d5ab33 22 * __fini_array_start
be_bryan 0:b74591d5ab33 23 * __fini_array_end
be_bryan 0:b74591d5ab33 24 * __data_end__
be_bryan 0:b74591d5ab33 25 * __bss_start__
be_bryan 0:b74591d5ab33 26 * __bss_end__
be_bryan 0:b74591d5ab33 27 * __end__
be_bryan 0:b74591d5ab33 28 * end
be_bryan 0:b74591d5ab33 29 * __HeapLimit
be_bryan 0:b74591d5ab33 30 * __StackLimit
be_bryan 0:b74591d5ab33 31 * __StackTop
be_bryan 0:b74591d5ab33 32 * __stack
be_bryan 0:b74591d5ab33 33 * _estack
be_bryan 0:b74591d5ab33 34 */
be_bryan 0:b74591d5ab33 35 ENTRY(Reset_Handler)
be_bryan 0:b74591d5ab33 36
be_bryan 0:b74591d5ab33 37 SECTIONS
be_bryan 0:b74591d5ab33 38 {
be_bryan 0:b74591d5ab33 39 .text :
be_bryan 0:b74591d5ab33 40 {
be_bryan 0:b74591d5ab33 41 KEEP(*(.isr_vector))
be_bryan 0:b74591d5ab33 42 *(.text*)
be_bryan 0:b74591d5ab33 43 KEEP(*(.init))
be_bryan 0:b74591d5ab33 44 KEEP(*(.fini))
be_bryan 0:b74591d5ab33 45
be_bryan 0:b74591d5ab33 46 /* .ctors */
be_bryan 0:b74591d5ab33 47 *crtbegin.o(.ctors)
be_bryan 0:b74591d5ab33 48 *crtbegin?.o(.ctors)
be_bryan 0:b74591d5ab33 49 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
be_bryan 0:b74591d5ab33 50 *(SORT(.ctors.*))
be_bryan 0:b74591d5ab33 51 *(.ctors)
be_bryan 0:b74591d5ab33 52
be_bryan 0:b74591d5ab33 53 /* .dtors */
be_bryan 0:b74591d5ab33 54 *crtbegin.o(.dtors)
be_bryan 0:b74591d5ab33 55 *crtbegin?.o(.dtors)
be_bryan 0:b74591d5ab33 56 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
be_bryan 0:b74591d5ab33 57 *(SORT(.dtors.*))
be_bryan 0:b74591d5ab33 58 *(.dtors)
be_bryan 0:b74591d5ab33 59
be_bryan 0:b74591d5ab33 60 *(.rodata*)
be_bryan 0:b74591d5ab33 61
be_bryan 0:b74591d5ab33 62 KEEP(*(.eh_frame*))
be_bryan 0:b74591d5ab33 63 } > FLASH
be_bryan 0:b74591d5ab33 64
be_bryan 0:b74591d5ab33 65 .ARM.extab :
be_bryan 0:b74591d5ab33 66 {
be_bryan 0:b74591d5ab33 67 *(.ARM.extab* .gnu.linkonce.armextab.*)
be_bryan 0:b74591d5ab33 68 } > FLASH
be_bryan 0:b74591d5ab33 69
be_bryan 0:b74591d5ab33 70 __exidx_start = .;
be_bryan 0:b74591d5ab33 71 .ARM.exidx :
be_bryan 0:b74591d5ab33 72 {
be_bryan 0:b74591d5ab33 73 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
be_bryan 0:b74591d5ab33 74 } > FLASH
be_bryan 0:b74591d5ab33 75 __exidx_end = .;
be_bryan 0:b74591d5ab33 76
be_bryan 0:b74591d5ab33 77 __etext = .;
be_bryan 0:b74591d5ab33 78 _sidata = .;
be_bryan 0:b74591d5ab33 79
be_bryan 0:b74591d5ab33 80 .data : AT (__etext)
be_bryan 0:b74591d5ab33 81 {
be_bryan 0:b74591d5ab33 82 __data_start__ = .;
be_bryan 0:b74591d5ab33 83 _sdata = .;
be_bryan 0:b74591d5ab33 84 *(vtable)
be_bryan 0:b74591d5ab33 85 *(.data*)
be_bryan 0:b74591d5ab33 86
be_bryan 0:b74591d5ab33 87 . = ALIGN(4);
be_bryan 0:b74591d5ab33 88 /* preinit data */
be_bryan 0:b74591d5ab33 89 PROVIDE_HIDDEN (__preinit_array_start = .);
be_bryan 0:b74591d5ab33 90 KEEP(*(.preinit_array))
be_bryan 0:b74591d5ab33 91 PROVIDE_HIDDEN (__preinit_array_end = .);
be_bryan 0:b74591d5ab33 92
be_bryan 0:b74591d5ab33 93 . = ALIGN(4);
be_bryan 0:b74591d5ab33 94 /* init data */
be_bryan 0:b74591d5ab33 95 PROVIDE_HIDDEN (__init_array_start = .);
be_bryan 0:b74591d5ab33 96 KEEP(*(SORT(.init_array.*)))
be_bryan 0:b74591d5ab33 97 KEEP(*(.init_array))
be_bryan 0:b74591d5ab33 98 PROVIDE_HIDDEN (__init_array_end = .);
be_bryan 0:b74591d5ab33 99
be_bryan 0:b74591d5ab33 100
be_bryan 0:b74591d5ab33 101 . = ALIGN(4);
be_bryan 0:b74591d5ab33 102 /* finit data */
be_bryan 0:b74591d5ab33 103 PROVIDE_HIDDEN (__fini_array_start = .);
be_bryan 0:b74591d5ab33 104 KEEP(*(SORT(.fini_array.*)))
be_bryan 0:b74591d5ab33 105 KEEP(*(.fini_array))
be_bryan 0:b74591d5ab33 106 PROVIDE_HIDDEN (__fini_array_end = .);
be_bryan 0:b74591d5ab33 107
be_bryan 0:b74591d5ab33 108 KEEP(*(.jcr*))
be_bryan 0:b74591d5ab33 109 . = ALIGN(4);
be_bryan 0:b74591d5ab33 110 /* All data end */
be_bryan 0:b74591d5ab33 111 __data_end__ = .;
be_bryan 0:b74591d5ab33 112 _edata = .;
be_bryan 0:b74591d5ab33 113
be_bryan 0:b74591d5ab33 114 } > RAM
be_bryan 0:b74591d5ab33 115
be_bryan 0:b74591d5ab33 116 .bss :
be_bryan 0:b74591d5ab33 117 {
be_bryan 0:b74591d5ab33 118 . = ALIGN(4);
be_bryan 0:b74591d5ab33 119 __bss_start__ = .;
be_bryan 0:b74591d5ab33 120 _sbss = .;
be_bryan 0:b74591d5ab33 121 *(.bss*)
be_bryan 0:b74591d5ab33 122 *(COMMON)
be_bryan 0:b74591d5ab33 123 . = ALIGN(4);
be_bryan 0:b74591d5ab33 124 __bss_end__ = .;
be_bryan 0:b74591d5ab33 125 _ebss = .;
be_bryan 0:b74591d5ab33 126 } > RAM
be_bryan 0:b74591d5ab33 127
be_bryan 0:b74591d5ab33 128 .heap (COPY):
be_bryan 0:b74591d5ab33 129 {
be_bryan 0:b74591d5ab33 130 __end__ = .;
be_bryan 0:b74591d5ab33 131 end = __end__;
be_bryan 0:b74591d5ab33 132 *(.heap*)
be_bryan 0:b74591d5ab33 133 __HeapLimit = .;
be_bryan 0:b74591d5ab33 134 } > RAM
be_bryan 0:b74591d5ab33 135
be_bryan 0:b74591d5ab33 136 /* .stack_dummy section doesn't contains any symbols. It is only
be_bryan 0:b74591d5ab33 137 * used for linker to calculate size of stack sections, and assign
be_bryan 0:b74591d5ab33 138 * values to stack symbols later */
be_bryan 0:b74591d5ab33 139 .stack_dummy (COPY):
be_bryan 0:b74591d5ab33 140 {
be_bryan 0:b74591d5ab33 141 *(.stack*)
be_bryan 0:b74591d5ab33 142 } > RAM
be_bryan 0:b74591d5ab33 143
be_bryan 0:b74591d5ab33 144 /* Set stack top to end of RAM, and stack limit move down by
be_bryan 0:b74591d5ab33 145 * size of stack_dummy section */
be_bryan 0:b74591d5ab33 146 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
be_bryan 0:b74591d5ab33 147 _estack = __StackTop;
be_bryan 0:b74591d5ab33 148 __StackLimit = __StackTop - SIZEOF(.stack_dummy);
be_bryan 0:b74591d5ab33 149 PROVIDE(__stack = __StackTop);
be_bryan 0:b74591d5ab33 150
be_bryan 0:b74591d5ab33 151 /* Check if data + heap + stack exceeds RAM limit */
be_bryan 0:b74591d5ab33 152 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
be_bryan 0:b74591d5ab33 153 }