1 |
MEMORY |
---|
2 |
{ |
---|
3 |
UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 |
---|
4 |
AHB_Peripherals (wx) : ORIGIN = 0xffe00000, LENGTH = 0x00200000 |
---|
5 |
Battery_RAM (wx) : ORIGIN = 0xe0084000, LENGTH = 0x00000800 |
---|
6 |
APB_Peripherals (wx) : ORIGIN = 0xe0000000, LENGTH = 0x00200000 |
---|
7 |
USB_RAM (wx) : ORIGIN = 0x7fd00000, LENGTH = 0x00002000 |
---|
8 |
Ethernet_RAM (wx) : ORIGIN = 0x7fe00000, LENGTH = 0x00004000 |
---|
9 |
SRAM (wx) : ORIGIN = 0x40000000, LENGTH = 0x00008000 |
---|
10 |
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 |
---|
11 |
} |
---|
12 |
|
---|
13 |
|
---|
14 |
SECTIONS |
---|
15 |
{ |
---|
16 |
__AHB_Peripherals_segment_start__ = 0xffe00000; |
---|
17 |
__AHB_Peripherals_segment_end__ = 0x00000000; |
---|
18 |
__Battery_RAM_segment_start__ = 0xe0084000; |
---|
19 |
__Battery_RAM_segment_end__ = 0xe0084800; |
---|
20 |
__APB_Peripherals_segment_start__ = 0xe0000000; |
---|
21 |
__APB_Peripherals_segment_end__ = 0xe0200000; |
---|
22 |
__USB_RAM_segment_start__ = 0x7fd00000; |
---|
23 |
__USB_RAM_segment_end__ = 0x7fd02000; |
---|
24 |
__Ethernet_RAM_segment_start__ = 0x7fe00000; |
---|
25 |
__Ethernet_RAM_segment_end__ = 0x7fe04000; |
---|
26 |
__SRAM_segment_start__ = 0x40000000; |
---|
27 |
__SRAM_segment_end__ = 0x40008000; |
---|
28 |
__FLASH_segment_start__ = 0x00000000; |
---|
29 |
__FLASH_segment_end__ = 0x00080000; |
---|
30 |
|
---|
31 |
__STACKSIZE__ = 1024; |
---|
32 |
__STACKSIZE_IRQ__ = 256; |
---|
33 |
__STACKSIZE_FIQ__ = 256; |
---|
34 |
__STACKSIZE_SVC__ = 0; |
---|
35 |
__STACKSIZE_ABT__ = 0; |
---|
36 |
__STACKSIZE_UND__ = 0; |
---|
37 |
__HEAPSIZE__ = 1024; |
---|
38 |
|
---|
39 |
__vectors_ram_load_start__ = __SRAM_segment_start__; |
---|
40 |
.vectors_ram __SRAM_segment_start__ (NOLOAD) : |
---|
41 |
{ |
---|
42 |
__vectors_ram_start__ = .; |
---|
43 |
*(.vectors_ram) |
---|
44 |
. = MAX(__vectors_ram_start__ + 0x3C , .); |
---|
45 |
} |
---|
46 |
__vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); |
---|
47 |
|
---|
48 |
. = ASSERT(__vectors_ram_end__ >= __SRAM_segment_start__ && __vectors_ram_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .vectors_ram is too large to fit in SRAM memory segment"); |
---|
49 |
|
---|
50 |
__vectors_load_start__ = __FLASH_segment_start__; |
---|
51 |
.vectors __FLASH_segment_start__ : |
---|
52 |
{ |
---|
53 |
__vectors_start__ = .; |
---|
54 |
*(.vectors .vectors.*) |
---|
55 |
} |
---|
56 |
__vectors_end__ = __vectors_start__ + SIZEOF(.vectors); |
---|
57 |
|
---|
58 |
. = ASSERT(__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error: .vectors is too large to fit in FLASH memory segment"); |
---|
59 |
|
---|
60 |
__init_load_start__ = ALIGN(__vectors_end__ , 4); |
---|
61 |
.init ALIGN(__vectors_end__ , 4) : |
---|
62 |
{ |
---|
63 |
__init_start__ = .; |
---|
64 |
*(.init .init.*) |
---|
65 |
} |
---|
66 |
__init_end__ = __init_start__ + SIZEOF(.init); |
---|
67 |
|
---|
68 |
. = ASSERT(__init_end__ >= __FLASH_segment_start__ && __init_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error: .init is too large to fit in FLASH memory segment"); |
---|
69 |
|
---|
70 |
__text_load_start__ = ALIGN(__init_end__ , 4); |
---|
71 |
.text ALIGN(__init_end__ , 4) : |
---|
72 |
{ |
---|
73 |
__text_start__ = .; |
---|
74 |
*(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table) |
---|
75 |
} |
---|
76 |
__text_end__ = __text_start__ + SIZEOF(.text); |
---|
77 |
|
---|
78 |
. = ASSERT(__text_end__ >= __FLASH_segment_start__ && __text_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error: .text is too large to fit in FLASH memory segment"); |
---|
79 |
|
---|
80 |
__dtors_load_start__ = ALIGN(__text_end__ , 4); |
---|
81 |
.dtors ALIGN(__text_end__ , 4) : |
---|
82 |
{ |
---|
83 |
__dtors_start__ = .; |
---|
84 |
KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) |
---|
85 |
} |
---|
86 |
__dtors_end__ = __dtors_start__ + SIZEOF(.dtors); |
---|
87 |
|
---|
88 |
. = ASSERT(__dtors_end__ >= __FLASH_segment_start__ && __dtors_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error: .dtors is too large to fit in FLASH memory segment"); |
---|
89 |
|
---|
90 |
__ctors_load_start__ = ALIGN(__dtors_end__ , 4); |
---|
91 |
.ctors ALIGN(__dtors_end__ , 4) : |
---|
92 |
{ |
---|
93 |
__ctors_start__ = .; |
---|
94 |
KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) |
---|
95 |
} |
---|
96 |
__ctors_end__ = __ctors_start__ + SIZEOF(.ctors); |
---|
97 |
|
---|
98 |
. = ASSERT(__ctors_end__ >= __FLASH_segment_start__ && __ctors_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error: .ctors is too large to fit in FLASH memory segment"); |
---|
99 |
|
---|
100 |
__rodata_load_start__ = ALIGN(__ctors_end__ , 4); |
---|
101 |
.rodata ALIGN(__ctors_end__ , 4) : |
---|
102 |
{ |
---|
103 |
__rodata_start__ = .; |
---|
104 |
*(.rodata .rodata.* .gnu.linkonce.r.*) |
---|
105 |
} |
---|
106 |
__rodata_end__ = __rodata_start__ + SIZEOF(.rodata); |
---|
107 |
|
---|
108 |
. = ASSERT(__rodata_end__ >= __FLASH_segment_start__ && __rodata_end__ <= (__FLASH_segment_start__ + 0x00080000) , "error: .rodata is too large to fit in FLASH memory segment"); |
---|
109 |
|
---|
110 |
__fast_load_start__ = ALIGN(__rodata_end__ , 4); |
---|
111 |
.fast ALIGN(__vectors_ram_end__ , 4) : AT(ALIGN(__rodata_end__ , 4)) |
---|
112 |
{ |
---|
113 |
__fast_start__ = .; |
---|
114 |
*(.fast .fast.*) |
---|
115 |
} |
---|
116 |
__fast_end__ = __fast_start__ + SIZEOF(.fast); |
---|
117 |
|
---|
118 |
__fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); |
---|
119 |
|
---|
120 |
. = ASSERT((__fast_load_start__ + SIZEOF(.fast)) >= __FLASH_segment_start__ && (__fast_load_start__ + SIZEOF(.fast)) <= (__FLASH_segment_start__ + 0x00080000) , "error: .fast is too large to fit in FLASH memory segment"); |
---|
121 |
|
---|
122 |
.fast_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) : |
---|
123 |
{ |
---|
124 |
__fast_run_start__ = .; |
---|
125 |
. = MAX(__fast_run_start__ + SIZEOF(.fast), .); |
---|
126 |
} |
---|
127 |
__fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); |
---|
128 |
|
---|
129 |
. = ASSERT(__fast_run_end__ >= __SRAM_segment_start__ && __fast_run_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .fast_run is too large to fit in SRAM memory segment"); |
---|
130 |
|
---|
131 |
__data_load_start__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4); |
---|
132 |
.data ALIGN(__fast_run_end__ , 4) : AT(ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4)) |
---|
133 |
{ |
---|
134 |
__data_start__ = .; |
---|
135 |
*(.data .data.* .gnu.linkonce.d.*) |
---|
136 |
} |
---|
137 |
__data_end__ = __data_start__ + SIZEOF(.data); |
---|
138 |
|
---|
139 |
__data_load_end__ = __data_load_start__ + SIZEOF(.data); |
---|
140 |
|
---|
141 |
__FLASH_segment_used_end__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4) + SIZEOF(.data); |
---|
142 |
|
---|
143 |
. = ASSERT((__data_load_start__ + SIZEOF(.data)) >= __FLASH_segment_start__ && (__data_load_start__ + SIZEOF(.data)) <= (__FLASH_segment_start__ + 0x00080000) , "error: .data is too large to fit in FLASH memory segment"); |
---|
144 |
|
---|
145 |
.data_run ALIGN(__fast_run_end__ , 4) (NOLOAD) : |
---|
146 |
{ |
---|
147 |
__data_run_start__ = .; |
---|
148 |
. = MAX(__data_run_start__ + SIZEOF(.data), .); |
---|
149 |
} |
---|
150 |
__data_run_end__ = __data_run_start__ + SIZEOF(.data_run); |
---|
151 |
|
---|
152 |
. = ASSERT(__data_run_end__ >= __SRAM_segment_start__ && __data_run_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .data_run is too large to fit in SRAM memory segment"); |
---|
153 |
|
---|
154 |
__bss_load_start__ = ALIGN(__data_run_end__ , 4); |
---|
155 |
.bss ALIGN(__data_run_end__ , 4) (NOLOAD) : |
---|
156 |
{ |
---|
157 |
__bss_start__ = .; |
---|
158 |
*(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) |
---|
159 |
} |
---|
160 |
__bss_end__ = __bss_start__ + SIZEOF(.bss); |
---|
161 |
|
---|
162 |
. = ASSERT(__bss_end__ >= __SRAM_segment_start__ && __bss_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .bss is too large to fit in SRAM memory segment"); |
---|
163 |
|
---|
164 |
__non_init_load_start__ = ALIGN(__bss_end__ , 4); |
---|
165 |
.non_init ALIGN(__bss_end__ , 4) (NOLOAD) : |
---|
166 |
{ |
---|
167 |
__non_init_start__ = .; |
---|
168 |
*(.non_init .non_init.*) |
---|
169 |
} |
---|
170 |
__non_init_end__ = __non_init_start__ + SIZEOF(.non_init); |
---|
171 |
|
---|
172 |
. = ASSERT(__non_init_end__ >= __SRAM_segment_start__ && __non_init_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .non_init is too large to fit in SRAM memory segment"); |
---|
173 |
|
---|
174 |
__heap_load_start__ = ALIGN(__non_init_end__ , 4); |
---|
175 |
.heap ALIGN(__non_init_end__ , 4) (NOLOAD) : |
---|
176 |
{ |
---|
177 |
__heap_start__ = .; |
---|
178 |
*(.heap) |
---|
179 |
. = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); |
---|
180 |
} |
---|
181 |
__heap_end__ = __heap_start__ + SIZEOF(.heap); |
---|
182 |
|
---|
183 |
. = ASSERT(__heap_end__ >= __SRAM_segment_start__ && __heap_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .heap is too large to fit in SRAM memory segment"); |
---|
184 |
|
---|
185 |
__stack_load_start__ = ALIGN(__heap_end__ , 4); |
---|
186 |
.stack ALIGN(__heap_end__ , 4) (NOLOAD) : |
---|
187 |
{ |
---|
188 |
__stack_start__ = .; |
---|
189 |
*(.stack) |
---|
190 |
. = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 4); |
---|
191 |
} |
---|
192 |
__stack_end__ = __stack_start__ + SIZEOF(.stack); |
---|
193 |
|
---|
194 |
. = ASSERT(__stack_end__ >= __SRAM_segment_start__ && __stack_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .stack is too large to fit in SRAM memory segment"); |
---|
195 |
|
---|
196 |
__stack_irq_load_start__ = ALIGN(__stack_end__ , 4); |
---|
197 |
.stack_irq ALIGN(__stack_end__ , 4) (NOLOAD) : |
---|
198 |
{ |
---|
199 |
__stack_irq_start__ = .; |
---|
200 |
*(.stack_irq) |
---|
201 |
. = ALIGN(MAX(__stack_irq_start__ + __STACKSIZE_IRQ__ , .), 4); |
---|
202 |
} |
---|
203 |
__stack_irq_end__ = __stack_irq_start__ + SIZEOF(.stack_irq); |
---|
204 |
|
---|
205 |
. = ASSERT(__stack_irq_end__ >= __SRAM_segment_start__ && __stack_irq_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .stack_irq is too large to fit in SRAM memory segment"); |
---|
206 |
|
---|
207 |
__stack_fiq_load_start__ = ALIGN(__stack_irq_end__ , 4); |
---|
208 |
.stack_fiq ALIGN(__stack_irq_end__ , 4) (NOLOAD) : |
---|
209 |
{ |
---|
210 |
__stack_fiq_start__ = .; |
---|
211 |
*(.stack_fiq) |
---|
212 |
. = ALIGN(MAX(__stack_fiq_start__ + __STACKSIZE_FIQ__ , .), 4); |
---|
213 |
} |
---|
214 |
__stack_fiq_end__ = __stack_fiq_start__ + SIZEOF(.stack_fiq); |
---|
215 |
|
---|
216 |
. = ASSERT(__stack_fiq_end__ >= __SRAM_segment_start__ && __stack_fiq_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .stack_fiq is too large to fit in SRAM memory segment"); |
---|
217 |
|
---|
218 |
__stack_svc_load_start__ = ALIGN(__stack_fiq_end__ , 4); |
---|
219 |
.stack_svc ALIGN(__stack_fiq_end__ , 4) (NOLOAD) : |
---|
220 |
{ |
---|
221 |
__stack_svc_start__ = .; |
---|
222 |
*(.stack_svc) |
---|
223 |
. = ALIGN(MAX(__stack_svc_start__ + __STACKSIZE_SVC__ , .), 4); |
---|
224 |
} |
---|
225 |
__stack_svc_end__ = __stack_svc_start__ + SIZEOF(.stack_svc); |
---|
226 |
|
---|
227 |
. = ASSERT(__stack_svc_end__ >= __SRAM_segment_start__ && __stack_svc_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .stack_svc is too large to fit in SRAM memory segment"); |
---|
228 |
|
---|
229 |
__stack_abt_load_start__ = ALIGN(__stack_svc_end__ , 4); |
---|
230 |
.stack_abt ALIGN(__stack_svc_end__ , 4) (NOLOAD) : |
---|
231 |
{ |
---|
232 |
__stack_abt_start__ = .; |
---|
233 |
*(.stack_abt) |
---|
234 |
. = ALIGN(MAX(__stack_abt_start__ + __STACKSIZE_ABT__ , .), 4); |
---|
235 |
} |
---|
236 |
__stack_abt_end__ = __stack_abt_start__ + SIZEOF(.stack_abt); |
---|
237 |
|
---|
238 |
. = ASSERT(__stack_abt_end__ >= __SRAM_segment_start__ && __stack_abt_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .stack_abt is too large to fit in SRAM memory segment"); |
---|
239 |
|
---|
240 |
__stack_und_load_start__ = ALIGN(__stack_abt_end__ , 4); |
---|
241 |
.stack_und ALIGN(__stack_abt_end__ , 4) (NOLOAD) : |
---|
242 |
{ |
---|
243 |
__stack_und_start__ = .; |
---|
244 |
*(.stack_und) |
---|
245 |
. = ALIGN(MAX(__stack_und_start__ + __STACKSIZE_UND__ , .), 4); |
---|
246 |
} |
---|
247 |
__stack_und_end__ = __stack_und_start__ + SIZEOF(.stack_und); |
---|
248 |
|
---|
249 |
__SRAM_segment_used_end__ = ALIGN(__stack_abt_end__ , 4) + SIZEOF(.stack_und); |
---|
250 |
|
---|
251 |
. = ASSERT(__stack_und_end__ >= __SRAM_segment_start__ && __stack_und_end__ <= (__SRAM_segment_start__ + 0x00008000) , "error: .stack_und is too large to fit in SRAM memory segment"); |
---|
252 |
|
---|
253 |
} |
---|
254 |
|
---|