Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilmgandhi 18:6a4db94011d3 1 /*
sahilmgandhi 18:6a4db94011d3 2 * Nuvoton M453 GCC linker script file
sahilmgandhi 18:6a4db94011d3 3 */
sahilmgandhi 18:6a4db94011d3 4
sahilmgandhi 18:6a4db94011d3 5 #if !defined(MBED_APP_START)
sahilmgandhi 18:6a4db94011d3 6 #define MBED_APP_START 0x00000000
sahilmgandhi 18:6a4db94011d3 7 #endif
sahilmgandhi 18:6a4db94011d3 8
sahilmgandhi 18:6a4db94011d3 9 #if !defined(MBED_APP_SIZE)
sahilmgandhi 18:6a4db94011d3 10 #define MBED_APP_SIZE 0x00040000
sahilmgandhi 18:6a4db94011d3 11 #endif
sahilmgandhi 18:6a4db94011d3 12
sahilmgandhi 18:6a4db94011d3 13 StackSize = 0x800;
sahilmgandhi 18:6a4db94011d3 14
sahilmgandhi 18:6a4db94011d3 15 MEMORY
sahilmgandhi 18:6a4db94011d3 16 {
sahilmgandhi 18:6a4db94011d3 17 VECTORS (rx) : ORIGIN = MBED_APP_START, LENGTH = 0x00000400
sahilmgandhi 18:6a4db94011d3 18 FLASH (rx) : ORIGIN = MBED_APP_START + 0x400, LENGTH = MBED_APP_SIZE - 0x00000400
sahilmgandhi 18:6a4db94011d3 19 RAM_INTERN (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 - 0x00000000
sahilmgandhi 18:6a4db94011d3 20 }
sahilmgandhi 18:6a4db94011d3 21
sahilmgandhi 18:6a4db94011d3 22 /**
sahilmgandhi 18:6a4db94011d3 23 * Must match cmsis_nvic.h
sahilmgandhi 18:6a4db94011d3 24 */
sahilmgandhi 18:6a4db94011d3 25 __vector_size = 4 * (16 + 64);
sahilmgandhi 18:6a4db94011d3 26
sahilmgandhi 18:6a4db94011d3 27
sahilmgandhi 18:6a4db94011d3 28 /* Linker script to place sections and symbol values. Should be used together
sahilmgandhi 18:6a4db94011d3 29 * with other linker script that defines memory regions FLASH and RAM.
sahilmgandhi 18:6a4db94011d3 30 * It references following symbols, which must be defined in code:
sahilmgandhi 18:6a4db94011d3 31 * Reset_Handler : Entry of reset handler
sahilmgandhi 18:6a4db94011d3 32 *
sahilmgandhi 18:6a4db94011d3 33 * It defines following symbols, which code can use without definition:
sahilmgandhi 18:6a4db94011d3 34 * __exidx_start
sahilmgandhi 18:6a4db94011d3 35 * __exidx_end
sahilmgandhi 18:6a4db94011d3 36 * __etext
sahilmgandhi 18:6a4db94011d3 37 * __data_start__
sahilmgandhi 18:6a4db94011d3 38 * __preinit_array_start
sahilmgandhi 18:6a4db94011d3 39 * __preinit_array_end
sahilmgandhi 18:6a4db94011d3 40 * __init_array_start
sahilmgandhi 18:6a4db94011d3 41 * __init_array_end
sahilmgandhi 18:6a4db94011d3 42 * __fini_array_start
sahilmgandhi 18:6a4db94011d3 43 * __fini_array_end
sahilmgandhi 18:6a4db94011d3 44 * __data_end__
sahilmgandhi 18:6a4db94011d3 45 * __bss_start__
sahilmgandhi 18:6a4db94011d3 46 * __bss_end__
sahilmgandhi 18:6a4db94011d3 47 * __end__
sahilmgandhi 18:6a4db94011d3 48 * end
sahilmgandhi 18:6a4db94011d3 49 * __HeapLimit
sahilmgandhi 18:6a4db94011d3 50 * __StackLimit
sahilmgandhi 18:6a4db94011d3 51 * __StackTop
sahilmgandhi 18:6a4db94011d3 52 * __stack
sahilmgandhi 18:6a4db94011d3 53 */
sahilmgandhi 18:6a4db94011d3 54 ENTRY(Reset_Handler)
sahilmgandhi 18:6a4db94011d3 55
sahilmgandhi 18:6a4db94011d3 56 SECTIONS
sahilmgandhi 18:6a4db94011d3 57 {
sahilmgandhi 18:6a4db94011d3 58 .isr_vector :
sahilmgandhi 18:6a4db94011d3 59 {
sahilmgandhi 18:6a4db94011d3 60 __vector_table = .;
sahilmgandhi 18:6a4db94011d3 61 KEEP(*(.vector_table))
sahilmgandhi 18:6a4db94011d3 62 . = ALIGN(4);
sahilmgandhi 18:6a4db94011d3 63 } > VECTORS
sahilmgandhi 18:6a4db94011d3 64
sahilmgandhi 18:6a4db94011d3 65 /* ensure that uvisor bss is at the beginning of memory */
sahilmgandhi 18:6a4db94011d3 66 .uvisor.bss (NOLOAD):
sahilmgandhi 18:6a4db94011d3 67 {
sahilmgandhi 18:6a4db94011d3 68 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 69 __uvisor_bss_start = .;
sahilmgandhi 18:6a4db94011d3 70
sahilmgandhi 18:6a4db94011d3 71 /* protected uvisor main bss */
sahilmgandhi 18:6a4db94011d3 72 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 73 __uvisor_bss_main_start = .;
sahilmgandhi 18:6a4db94011d3 74 KEEP(*(.keep.uvisor.bss.main))
sahilmgandhi 18:6a4db94011d3 75 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 76 __uvisor_bss_main_end = .;
sahilmgandhi 18:6a4db94011d3 77
sahilmgandhi 18:6a4db94011d3 78 /* protected uvisor secure boxes bss */
sahilmgandhi 18:6a4db94011d3 79 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 80 __uvisor_bss_boxes_start = .;
sahilmgandhi 18:6a4db94011d3 81 KEEP(*(.keep.uvisor.bss.boxes))
sahilmgandhi 18:6a4db94011d3 82 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 83 __uvisor_bss_boxes_end = .;
sahilmgandhi 18:6a4db94011d3 84
sahilmgandhi 18:6a4db94011d3 85 /* Ensure log2(size) alignment of the uvisor region, to ensure that the region can be effectively protected by the MPU. */
sahilmgandhi 18:6a4db94011d3 86 . = ALIGN(1 << LOG2CEIL(__uvisor_bss_boxes_end - __uvisor_bss_start));
sahilmgandhi 18:6a4db94011d3 87 __uvisor_bss_end = .;
sahilmgandhi 18:6a4db94011d3 88 } > RAM_INTERN
sahilmgandhi 18:6a4db94011d3 89
sahilmgandhi 18:6a4db94011d3 90 .text :
sahilmgandhi 18:6a4db94011d3 91 {
sahilmgandhi 18:6a4db94011d3 92 /* uVisor code and data */
sahilmgandhi 18:6a4db94011d3 93 . = ALIGN(4);
sahilmgandhi 18:6a4db94011d3 94 __uvisor_main_start = .;
sahilmgandhi 18:6a4db94011d3 95 *(.uvisor.main)
sahilmgandhi 18:6a4db94011d3 96 __uvisor_main_end = .;
sahilmgandhi 18:6a4db94011d3 97
sahilmgandhi 18:6a4db94011d3 98 *(.text*)
sahilmgandhi 18:6a4db94011d3 99
sahilmgandhi 18:6a4db94011d3 100 KEEP(*(.init))
sahilmgandhi 18:6a4db94011d3 101 KEEP(*(.fini))
sahilmgandhi 18:6a4db94011d3 102
sahilmgandhi 18:6a4db94011d3 103 /* .ctors */
sahilmgandhi 18:6a4db94011d3 104 *crtbegin.o(.ctors)
sahilmgandhi 18:6a4db94011d3 105 *crtbegin?.o(.ctors)
sahilmgandhi 18:6a4db94011d3 106 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
sahilmgandhi 18:6a4db94011d3 107 *(SORT(.ctors.*))
sahilmgandhi 18:6a4db94011d3 108 *(.ctors)
sahilmgandhi 18:6a4db94011d3 109
sahilmgandhi 18:6a4db94011d3 110 /* .dtors */
sahilmgandhi 18:6a4db94011d3 111 *crtbegin.o(.dtors)
sahilmgandhi 18:6a4db94011d3 112 *crtbegin?.o(.dtors)
sahilmgandhi 18:6a4db94011d3 113 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
sahilmgandhi 18:6a4db94011d3 114 *(SORT(.dtors.*))
sahilmgandhi 18:6a4db94011d3 115 *(.dtors)
sahilmgandhi 18:6a4db94011d3 116
sahilmgandhi 18:6a4db94011d3 117 *(.rodata*)
sahilmgandhi 18:6a4db94011d3 118
sahilmgandhi 18:6a4db94011d3 119 KEEP(*(.eh_frame*))
sahilmgandhi 18:6a4db94011d3 120 } > FLASH
sahilmgandhi 18:6a4db94011d3 121
sahilmgandhi 18:6a4db94011d3 122 .ARM.extab :
sahilmgandhi 18:6a4db94011d3 123 {
sahilmgandhi 18:6a4db94011d3 124 *(.ARM.extab* .gnu.linkonce.armextab.*)
sahilmgandhi 18:6a4db94011d3 125 } > FLASH
sahilmgandhi 18:6a4db94011d3 126
sahilmgandhi 18:6a4db94011d3 127 .ARM.exidx :
sahilmgandhi 18:6a4db94011d3 128 {
sahilmgandhi 18:6a4db94011d3 129 __exidx_start = .;
sahilmgandhi 18:6a4db94011d3 130 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
sahilmgandhi 18:6a4db94011d3 131 __exidx_end = .;
sahilmgandhi 18:6a4db94011d3 132 } > FLASH
sahilmgandhi 18:6a4db94011d3 133
sahilmgandhi 18:6a4db94011d3 134 /* .stack section doesn't contains any symbols. It is only
sahilmgandhi 18:6a4db94011d3 135 * used for linker to reserve space for the main stack section
sahilmgandhi 18:6a4db94011d3 136 * WARNING: .stack should come immediately after the last secure memory
sahilmgandhi 18:6a4db94011d3 137 * section. This provides stack overflow detection. */
sahilmgandhi 18:6a4db94011d3 138 .stack (NOLOAD):
sahilmgandhi 18:6a4db94011d3 139 {
sahilmgandhi 18:6a4db94011d3 140 __StackLimit = .;
sahilmgandhi 18:6a4db94011d3 141 *(.stack*);
sahilmgandhi 18:6a4db94011d3 142 . += StackSize - (. - __StackLimit);
sahilmgandhi 18:6a4db94011d3 143 } > RAM_INTERN
sahilmgandhi 18:6a4db94011d3 144
sahilmgandhi 18:6a4db94011d3 145 /* Set stack top to end of RAM, and stack limit move down by
sahilmgandhi 18:6a4db94011d3 146 * size of stack_dummy section */
sahilmgandhi 18:6a4db94011d3 147 __StackTop = ADDR(.stack) + SIZEOF(.stack);
sahilmgandhi 18:6a4db94011d3 148 __StackLimit = ADDR(.stack);
sahilmgandhi 18:6a4db94011d3 149 PROVIDE(__stack = __StackTop);
sahilmgandhi 18:6a4db94011d3 150
sahilmgandhi 18:6a4db94011d3 151 /* Relocate vector table in SRAM */
sahilmgandhi 18:6a4db94011d3 152 .isr_vector.reloc (NOLOAD) :
sahilmgandhi 18:6a4db94011d3 153 {
sahilmgandhi 18:6a4db94011d3 154 . = ALIGN(1 << LOG2CEIL(__vector_size));
sahilmgandhi 18:6a4db94011d3 155 PROVIDE(__start_vector_table__ = .);
sahilmgandhi 18:6a4db94011d3 156 . += __vector_size;
sahilmgandhi 18:6a4db94011d3 157 PROVIDE(__end_vector_table__ = .);
sahilmgandhi 18:6a4db94011d3 158 } > RAM_INTERN
sahilmgandhi 18:6a4db94011d3 159
sahilmgandhi 18:6a4db94011d3 160 .data :
sahilmgandhi 18:6a4db94011d3 161 {
sahilmgandhi 18:6a4db94011d3 162 PROVIDE( __etext = LOADADDR(.data) );
sahilmgandhi 18:6a4db94011d3 163
sahilmgandhi 18:6a4db94011d3 164 __data_start__ = .;
sahilmgandhi 18:6a4db94011d3 165 *(vtable)
sahilmgandhi 18:6a4db94011d3 166 *(.data*)
sahilmgandhi 18:6a4db94011d3 167
sahilmgandhi 18:6a4db94011d3 168 . = ALIGN(4);
sahilmgandhi 18:6a4db94011d3 169 /* preinit data */
sahilmgandhi 18:6a4db94011d3 170 PROVIDE_HIDDEN (__preinit_array_start = .);
sahilmgandhi 18:6a4db94011d3 171 KEEP(*(.preinit_array))
sahilmgandhi 18:6a4db94011d3 172 PROVIDE_HIDDEN (__preinit_array_end = .);
sahilmgandhi 18:6a4db94011d3 173
sahilmgandhi 18:6a4db94011d3 174 . = ALIGN(4);
sahilmgandhi 18:6a4db94011d3 175 /* init data */
sahilmgandhi 18:6a4db94011d3 176 PROVIDE_HIDDEN (__init_array_start = .);
sahilmgandhi 18:6a4db94011d3 177 KEEP(*(SORT(.init_array.*)))
sahilmgandhi 18:6a4db94011d3 178 KEEP(*(.init_array))
sahilmgandhi 18:6a4db94011d3 179 PROVIDE_HIDDEN (__init_array_end = .);
sahilmgandhi 18:6a4db94011d3 180
sahilmgandhi 18:6a4db94011d3 181 . = ALIGN(4);
sahilmgandhi 18:6a4db94011d3 182 /* finit data */
sahilmgandhi 18:6a4db94011d3 183 PROVIDE_HIDDEN (__fini_array_start = .);
sahilmgandhi 18:6a4db94011d3 184 KEEP(*(SORT(.fini_array.*)))
sahilmgandhi 18:6a4db94011d3 185 KEEP(*(.fini_array))
sahilmgandhi 18:6a4db94011d3 186 PROVIDE_HIDDEN (__fini_array_end = .);
sahilmgandhi 18:6a4db94011d3 187
sahilmgandhi 18:6a4db94011d3 188 /* All data end */
sahilmgandhi 18:6a4db94011d3 189 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 190 __data_end__ = .;
sahilmgandhi 18:6a4db94011d3 191
sahilmgandhi 18:6a4db94011d3 192 } >RAM_INTERN AT>FLASH
sahilmgandhi 18:6a4db94011d3 193
sahilmgandhi 18:6a4db94011d3 194 /* uvisor configuration data */
sahilmgandhi 18:6a4db94011d3 195 .uvisor.secure :
sahilmgandhi 18:6a4db94011d3 196 {
sahilmgandhi 18:6a4db94011d3 197 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 198 __uvisor_secure_start = .;
sahilmgandhi 18:6a4db94011d3 199
sahilmgandhi 18:6a4db94011d3 200 /* uvisor secure boxes configuration tables */
sahilmgandhi 18:6a4db94011d3 201 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 202 __uvisor_cfgtbl_start = .;
sahilmgandhi 18:6a4db94011d3 203 KEEP(*(.keep.uvisor.cfgtbl))
sahilmgandhi 18:6a4db94011d3 204 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 205 __uvisor_cfgtbl_end = .;
sahilmgandhi 18:6a4db94011d3 206
sahilmgandhi 18:6a4db94011d3 207 /* pointers to uvisor secure boxes configuration tables */
sahilmgandhi 18:6a4db94011d3 208 /* note: no further alignment here, we need to have the exact list of pointers */
sahilmgandhi 18:6a4db94011d3 209 __uvisor_cfgtbl_ptr_start = .;
sahilmgandhi 18:6a4db94011d3 210 KEEP(*(.keep.uvisor.cfgtbl_ptr_first))
sahilmgandhi 18:6a4db94011d3 211 KEEP(*(.keep.uvisor.cfgtbl_ptr))
sahilmgandhi 18:6a4db94011d3 212 __uvisor_cfgtbl_ptr_end = .;
sahilmgandhi 18:6a4db94011d3 213
sahilmgandhi 18:6a4db94011d3 214 /* the following symbols are kept for backward compatibility and will be soon
sahilmgandhi 18:6a4db94011d3 215 * deprecated; applications actively using uVisor (__uvisor_mode == UVISOR_ENABLED)
sahilmgandhi 18:6a4db94011d3 216 * will need to use uVisor 0.8.x or above, or the security assertions will halt the
sahilmgandhi 18:6a4db94011d3 217 * system */
sahilmgandhi 18:6a4db94011d3 218 /************************/
sahilmgandhi 18:6a4db94011d3 219 __uvisor_data_src = .;
sahilmgandhi 18:6a4db94011d3 220 __uvisor_data_start = .;
sahilmgandhi 18:6a4db94011d3 221 __uvisor_data_end = .;
sahilmgandhi 18:6a4db94011d3 222 /************************/
sahilmgandhi 18:6a4db94011d3 223
sahilmgandhi 18:6a4db94011d3 224 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 225 __uvisor_secure_end = .;
sahilmgandhi 18:6a4db94011d3 226 } >FLASH
sahilmgandhi 18:6a4db94011d3 227
sahilmgandhi 18:6a4db94011d3 228 .uninitialized (NOLOAD):
sahilmgandhi 18:6a4db94011d3 229 {
sahilmgandhi 18:6a4db94011d3 230 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 231 __uninitialized_start = .;
sahilmgandhi 18:6a4db94011d3 232 *(.uninitialized)
sahilmgandhi 18:6a4db94011d3 233 KEEP(*(.keep.uninitialized))
sahilmgandhi 18:6a4db94011d3 234 . = ALIGN(32);
sahilmgandhi 18:6a4db94011d3 235 __uninitialized_end = .;
sahilmgandhi 18:6a4db94011d3 236 } > RAM_INTERN
sahilmgandhi 18:6a4db94011d3 237
sahilmgandhi 18:6a4db94011d3 238 .bss (NOLOAD):
sahilmgandhi 18:6a4db94011d3 239 {
sahilmgandhi 18:6a4db94011d3 240 __bss_start__ = .;
sahilmgandhi 18:6a4db94011d3 241 *(.bss*)
sahilmgandhi 18:6a4db94011d3 242 *(COMMON)
sahilmgandhi 18:6a4db94011d3 243 __bss_end__ = .;
sahilmgandhi 18:6a4db94011d3 244 } > RAM_INTERN
sahilmgandhi 18:6a4db94011d3 245
sahilmgandhi 18:6a4db94011d3 246 .heap (NOLOAD):
sahilmgandhi 18:6a4db94011d3 247 {
sahilmgandhi 18:6a4db94011d3 248 __end__ = .;
sahilmgandhi 18:6a4db94011d3 249 end = __end__;
sahilmgandhi 18:6a4db94011d3 250 *(.heap*);
sahilmgandhi 18:6a4db94011d3 251 . += (ORIGIN(RAM_INTERN) + LENGTH(RAM_INTERN) - .);
sahilmgandhi 18:6a4db94011d3 252 __HeapLimit = .;
sahilmgandhi 18:6a4db94011d3 253 } > RAM_INTERN
sahilmgandhi 18:6a4db94011d3 254 PROVIDE(__heap_size = SIZEOF(.heap));
sahilmgandhi 18:6a4db94011d3 255 PROVIDE(__mbed_sbrk_start = ADDR(.heap));
sahilmgandhi 18:6a4db94011d3 256 PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap));
sahilmgandhi 18:6a4db94011d3 257
sahilmgandhi 18:6a4db94011d3 258 /* Provide physical memory boundaries for uVisor. */
sahilmgandhi 18:6a4db94011d3 259 __uvisor_flash_start = ORIGIN(VECTORS);
sahilmgandhi 18:6a4db94011d3 260 __uvisor_flash_end = ORIGIN(FLASH) + LENGTH(FLASH);
sahilmgandhi 18:6a4db94011d3 261 __uvisor_sram_start = ORIGIN(RAM_INTERN);
sahilmgandhi 18:6a4db94011d3 262 __uvisor_sram_end = ORIGIN(RAM_INTERN) + LENGTH(RAM_INTERN);
sahilmgandhi 18:6a4db94011d3 263 }