1/* 2***************************************************************************** 3** 4** File : AIR32F103XB_FLASH.ld 5** 6** Abstract : Linker script for AIR32F103xB Device with 7** 128KByte FLASH, 96KByte RAM 8** 9** Set heap size, stack size and stack location according 10** to application requirements. 11** 12** Set memory bank area and size if external memory is used. 13** 14** Target : AIR32 15** 16** 17** Distribution: The file is distributed as is, without any warranty 18** of any kind. 19** 20** (c)Copyright Ac6. 21** You may use this file as-is or modify it according to the needs of your 22** project. Distribution of this file (unmodified or modified) is not 23** permitted. Ac6 permit registered System Workbench for MCU users the 24** rights to distribute the assembled, compiled & linked contents of this 25** file as part of an application binary file, provided that it is built 26** using the System Workbench for MCU toolchain. 27** 28***************************************************************************** 29*/ 30 31/* Entry Point */ 32ENTRY(Reset_Handler) 33 34/* Highest address of the user mode stack */ 35_estack = 0x20004FFF; /* end of RAM */ 36 37/* Generate a link error if heap and stack don't fit into RAM */ 38_Min_Heap_Size = 0x200; /* required amount of heap */ 39_Min_Stack_Size = 0x400; /* required amount of stack */ 40 41/* Specify the memory areas */ 42MEMORY 43{ 44FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K 45RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K 46} 47 48/* Define output sections */ 49SECTIONS 50{ 51 /* The startup code goes first into FLASH */ 52 .isr_vector : 53 { 54 . = ALIGN(4); 55 KEEP(*(.isr_vector)) /* Startup code */ 56 . = ALIGN(4); 57 } >FLASH 58 59 /* The program code and other data goes into FLASH */ 60 .text : 61 { 62 . = ALIGN(4); 63 *(.text) /* .text sections (code) */ 64 *(.text*) /* .text* sections (code) */ 65 *(.glue_7) /* glue arm to thumb code */ 66 *(.glue_7t) /* glue thumb to arm code */ 67 *(.eh_frame) 68 69 KEEP (*(.init)) 70 KEEP (*(.fini)) 71 72 . = ALIGN(4); 73 _etext = .; /* define a global symbols at end of code */ 74 } >FLASH 75 76 /* Constant data goes into FLASH */ 77 .rodata : 78 { 79 . = ALIGN(4); 80 *(.rodata) /* .rodata sections (constants, strings, etc.) */ 81 *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ 82 . = ALIGN(4); 83 } >FLASH 84 85 .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH 86 .ARM : { 87 __exidx_start = .; 88 *(.ARM.exidx*) 89 __exidx_end = .; 90 } >FLASH 91 92 .preinit_array : 93 { 94 PROVIDE_HIDDEN (__preinit_array_start = .); 95 KEEP (*(.preinit_array*)) 96 PROVIDE_HIDDEN (__preinit_array_end = .); 97 } >FLASH 98 .init_array : 99 { 100 PROVIDE_HIDDEN (__init_array_start = .); 101 KEEP (*(SORT(.init_array.*))) 102 KEEP (*(.init_array*)) 103 PROVIDE_HIDDEN (__init_array_end = .); 104 } >FLASH 105 .fini_array : 106 { 107 PROVIDE_HIDDEN (__fini_array_start = .); 108 KEEP (*(SORT(.fini_array.*))) 109 KEEP (*(.fini_array*)) 110 PROVIDE_HIDDEN (__fini_array_end = .); 111 } >FLASH 112 113 /* used by the startup to initialize data */ 114 _sidata = LOADADDR(.data); 115 116 /* Initialized data sections goes into RAM, load LMA copy after code */ 117 .data : 118 { 119 . = ALIGN(4); 120 _sdata = .; /* create a global symbol at data start */ 121 *(.data) /* .data sections */ 122 *(.data*) /* .data* sections */ 123 124 . = ALIGN(4); 125 _edata = .; /* define a global symbol at data end */ 126 } >RAM AT> FLASH 127 128 129 /* Uninitialized data section */ 130 . = ALIGN(4); 131 .bss : 132 { 133 /* This is used by the startup in order to initialize the .bss secion */ 134 _sbss = .; /* define a global symbol at bss start */ 135 __bss_start__ = _sbss; 136 *(.bss) 137 *(.bss*) 138 *(COMMON) 139 140 . = ALIGN(4); 141 _ebss = .; /* define a global symbol at bss end */ 142 __bss_end__ = _ebss; 143 } >RAM 144 145 /* User_heap_stack section, used to check that there is enough RAM left */ 146 ._user_heap_stack : 147 { 148 . = ALIGN(8); 149 PROVIDE ( end = . ); 150 PROVIDE ( _end = . ); 151 . = . + _Min_Heap_Size; 152 . = . + _Min_Stack_Size; 153 . = ALIGN(8); 154 } >RAM 155 156 157 158 /* Remove information from the standard libraries */ 159 /DISCARD/ : 160 { 161 libc.a ( * ) 162 libm.a ( * ) 163 libgcc.a ( * ) 164 } 165 166 .ARM.attributes 0 : { *(.ARM.attributes) } 167} 168