mbed

Dependents:   DHTSensor_Test K64F_eCompass_OneNET_JW

Committer:
mbotkinl
Date:
Wed Feb 25 20:22:22 2015 +0000
Revision:
0:2cc6bb4d7fea
Working code to read Temperature and Humidity readings

Who changed what in which revision?

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