Skip to content

Commit a8d3044

Browse files
committed
author/copyright/message no longer used; stm32f1 updated to use STM ldscripts and code from template
1 parent 014b6d6 commit a8d3044

File tree

11 files changed

+246
-274
lines changed

11 files changed

+246
-274
lines changed

ilg.gnuarmeclipse.templates.stm/templates/stm32f10x_exe_c_project/ldscripts/mem.ld

+19-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,25 @@
66
* RAM.LENGTH: length of RAM bank 0
77
*/
88

9+
/* Memory Spaces Definitions */
10+
911
MEMORY
1012
{
11-
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = $(flashSize)K
12-
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = $(ramSize)K
13+
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = $(STM32F1ramSize)K
14+
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = $(STM32F1flashSize)K
15+
FLASHB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
16+
EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0
17+
EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
18+
EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0
19+
EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0
1320
}
21+
22+
/* higher address of the user mode stack */
23+
_estack = 0x20000000 + $(STM32F1ramSize)*1024;
24+
25+
/*
26+
For external ram use
27+
RAM (xrw) : ORIGIN = 0x68000000, LENGTH = $(ramSize)K
28+
29+
_estack = 0x68000000 + $(STM32F1ramSize)*1024;
30+
*/
Original file line numberDiff line numberDiff line change
@@ -1,175 +1,181 @@
1-
/* Based on the linker script from CMSIS for GCC for ARM Embedded Processors.
2-
* Should be included after memory layout script.
3-
*/
4-
5-
/* Library configurations */
6-
GROUP(libgcc.a libc.a libm.a)
7-
8-
/* Linker script to place sections and symbol values. Should be used together
9-
* with other linker script that defines memory regions FLASH and RAM.
10-
* It references following symbols, which must be defined in code:
11-
* Reset_Handler : Entry of reset handler
12-
*
13-
* It defines following symbols, which code can use without definition:
14-
* __exidx_start
15-
* __exidx_end
16-
* __etext
17-
* __data_start__
18-
* __preinit_array_start
19-
* __preinit_array_end
20-
* __init_array_start
21-
* __init_array_end
22-
* __fini_array_start
23-
* __fini_array_end
24-
* __data_end__
25-
* __bss_start__
26-
* __bss_end__
27-
* __end__
28-
* end
29-
* __HeapLimit
30-
* __StackLimit
31-
* __StackTop
32-
* __stack
33-
*/
34-
35-
/* Used in QEMU, the embedded images entry point is in the interrupts table */
36-
ENTRY(Reset_Handler)
1+
/*
2+
Default linker script for STM32F10x_1024K_1024K
3+
Copyright RAISONANCE S.A.S. 2008
4+
*/
5+
6+
/* include the common STM32F10x sub-script */
7+
8+
/* Common part of the linker scripts for STM32 devices*/
9+
10+
11+
/* default stack sizes.
12+
13+
These are used by the startup in order to allocate stacks for the different modes.
14+
*/
15+
16+
__Stack_Size = 1024 ;
17+
18+
PROVIDE ( _Stack_Size = __Stack_Size ) ;
19+
20+
__Stack_Init = _estack - __Stack_Size ;
21+
22+
/*"PROVIDE" allows to easily override these values from an object file or the commmand line.*/
23+
PROVIDE ( _Stack_Init = __Stack_Init ) ;
24+
25+
/*
26+
There will be a link error if there is not this amount of RAM free at the end.
27+
*/
28+
_Minimum_Stack_Size = 0x100 ;
29+
30+
31+
32+
/* include the sections management sub-script for FLASH mode */
33+
34+
/* Sections Definitions */
3735

3836
SECTIONS
3937
{
40-
.text :
41-
{
42-
KEEP(*(.core_isr_vectors))
43-
KEEP(*(.family_isr_vectors))
44-
KEEP(*(.device_isr_vectors))
45-
KEEP(*(.isr_vector))
46-
*(.text*)
47-
48-
KEEP(*(.init))
49-
KEEP(*(.fini))
50-
51-
/* .ctors */
52-
*crtbegin.o(.ctors)
53-
*crtbegin?.o(.ctors)
54-
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
55-
*(SORT(.ctors.*))
56-
*(.ctors)
57-
58-
/* .dtors */
59-
*crtbegin.o(.dtors)
60-
*crtbegin?.o(.dtors)
61-
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
62-
*(SORT(.dtors.*))
63-
*(.dtors)
64-
65-
. = ALIGN(4);
66-
/* preinit data */
67-
PROVIDE_HIDDEN (__preinit_array_start = .);
68-
KEEP(*(.preinit_array))
69-
PROVIDE_HIDDEN (__preinit_array_end = .);
70-
71-
. = ALIGN(4);
72-
/* init data */
73-
PROVIDE_HIDDEN (__init_array_start = .);
74-
KEEP(*(SORT(.init_array.*)))
75-
KEEP(*(.init_array))
76-
PROVIDE_HIDDEN (__init_array_end = .);
77-
78-
79-
. = ALIGN(4);
80-
/* finit data */
81-
PROVIDE_HIDDEN (__fini_array_start = .);
82-
KEEP(*(SORT(.fini_array.*)))
83-
KEEP(*(.fini_array))
84-
PROVIDE_HIDDEN (__fini_array_end = .);
85-
86-
*(.rodata*)
87-
88-
KEEP(*(.eh_frame*))
89-
} > FLASH
90-
91-
.ARM.extab :
92-
{
93-
*(.ARM.extab* .gnu.linkonce.armextab.*)
94-
} > FLASH
95-
96-
__exidx_start = .;
97-
.ARM.exidx :
98-
{
99-
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
100-
} > FLASH
101-
__exidx_end = .;
102-
103-
__etext = .;
104-
_sidata = .; /* STM libs specifics */
105-
106-
/* The initialised data section is stored immediately
107-
at the end of the text section */
108-
.data : AT (__etext)
109-
{
110-
__data_start__ = .;
111-
_sdata = .; /* STM libs specifics */
112-
113-
*(vtable)
114-
*(.data*)
115-
116-
. = ALIGN(4);
117-
/* init_array/fini_array moved to flash, align preserved */
118-
119-
KEEP(*(.jcr*))
120-
. = ALIGN(4);
121-
/* All data end */
122-
123-
__data_end__ = .;
124-
_edata = .; /* STM libs specifics */
125-
126-
} > RAM
127-
128-
.bss :
129-
{
130-
. = ALIGN(4);
131-
__bss_start__ = .;
132-
_sbss = .; /* STM libs specifics */
133-
134-
*(.bss*)
135-
*(COMMON)
136-
. = ALIGN(4);
137-
__bss_end__ = .;
138-
_ebss = .; /* STM libs specifics */
139-
140-
} > RAM
141-
142-
.heap (COPY):
143-
{
144-
__end__ = .;
145-
end = __end__;
146-
*(.heap*)
147-
__HeapLimit = .;
148-
} > RAM
149-
150-
/* .stack_dummy section doesn't contains any symbols. It is only
151-
* used for linker to calculate size of stack sections, and assign
152-
* values to stack symbols later */
153-
.stack_dummy (COPY):
154-
{
155-
*(.stack*)
156-
} > RAM
157-
158-
/* Set stack top to end of RAM, and stack limit move down by
159-
* size of stack_dummy section */
160-
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
161-
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
162-
163-
PROVIDE(__stack = __StackTop);
164-
PROVIDE(_estack = __StackTop); /* STM libs specifics */
165-
166-
/* Check if data + heap + stack exceeds RAM limit */
167-
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
168-
169-
170-
/* The following is from F4 linker scripts */
171-
172-
/* after that it's only debugging information. */
38+
/* for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, which goes to FLASH */
39+
.isr_vector :
40+
{
41+
. = ALIGN(4);
42+
KEEP(*(.isr_vector)) /* Startup code */
43+
. = ALIGN(4);
44+
} >FLASH
45+
46+
/* for some STRx devices, the beginning of the startup code is stored in the .flashtext section, which goes to FLASH */
47+
.flashtext :
48+
{
49+
. = ALIGN(4);
50+
*(.flashtext) /* Startup code */
51+
. = ALIGN(4);
52+
} >FLASH
53+
54+
55+
/* the program code is stored in the .text section, which goes to Flash */
56+
.text :
57+
{
58+
. = ALIGN(4);
59+
60+
*(.text) /* remaining code */
61+
*(.text.*) /* remaining code */
62+
*(.rodata) /* read-only data (constants) */
63+
*(.rodata*)
64+
*(.glue_7)
65+
*(.glue_7t)
66+
67+
. = ALIGN(4);
68+
_etext = .;
69+
/* This is used by the startup in order to initialize the .data secion */
70+
_sidata = _etext;
71+
} >FLASH
72+
73+
74+
75+
/* This is the initialized data section
76+
The program executes knowing that the data is in the RAM
77+
but the loader puts the initial values in the FLASH (inidata).
78+
It is one task of the startup to copy the initial values from FLASH to RAM. */
79+
.data : AT ( _sidata )
80+
{
81+
. = ALIGN(4);
82+
/* This is used by the startup in order to initialize the .data secion */
83+
_sdata = . ;
84+
85+
*(.data)
86+
*(.data.*)
87+
88+
. = ALIGN(4);
89+
/* This is used by the startup in order to initialize the .data secion */
90+
_edata = . ;
91+
} >RAM
92+
93+
94+
95+
/* This is the uninitialized data section */
96+
.bss :
97+
{
98+
. = ALIGN(4);
99+
/* This is used by the startup in order to initialize the .bss secion */
100+
_sbss = .;
101+
102+
*(.bss)
103+
*(COMMON)
104+
105+
. = ALIGN(4);
106+
/* This is used by the startup in order to initialize the .bss secion */
107+
_ebss = . ;
108+
} >RAM
109+
110+
PROVIDE ( end = _ebss );
111+
PROVIDE ( _end = _ebss );
112+
113+
/* This is the user stack section
114+
This is just to check that there is enough RAM left for the User mode stack
115+
It should generate an error if it's full.
116+
*/
117+
._usrstack :
118+
{
119+
. = ALIGN(4);
120+
_susrstack = . ;
121+
122+
. = . + _Minimum_Stack_Size ;
123+
124+
. = ALIGN(4);
125+
_eusrstack = . ;
126+
} >RAM
127+
128+
129+
130+
/* this is the FLASH Bank1 */
131+
/* the C or assembly source must explicitly place the code or data there
132+
using the "section" attribute */
133+
.b1text :
134+
{
135+
*(.b1text) /* remaining code */
136+
*(.b1rodata) /* read-only data (constants) */
137+
*(.b1rodata*)
138+
} >FLASHB1
139+
140+
/* this is the EXTMEM */
141+
/* the C or assembly source must explicitly place the code or data there
142+
using the "section" attribute */
143+
144+
/* EXTMEM Bank0 */
145+
.eb0text :
146+
{
147+
*(.eb0text) /* remaining code */
148+
*(.eb0rodata) /* read-only data (constants) */
149+
*(.eb0rodata*)
150+
} >EXTMEMB0
151+
152+
/* EXTMEM Bank1 */
153+
.eb1text :
154+
{
155+
*(.eb1text) /* remaining code */
156+
*(.eb1rodata) /* read-only data (constants) */
157+
*(.eb1rodata*)
158+
} >EXTMEMB1
159+
160+
/* EXTMEM Bank2 */
161+
.eb2text :
162+
{
163+
*(.eb2text) /* remaining code */
164+
*(.eb2rodata) /* read-only data (constants) */
165+
*(.eb2rodata*)
166+
} >EXTMEMB2
167+
168+
/* EXTMEM Bank0 */
169+
.eb3text :
170+
{
171+
*(.eb3text) /* remaining code */
172+
*(.eb3rodata) /* read-only data (constants) */
173+
*(.eb3rodata*)
174+
} >EXTMEMB3
175+
176+
177+
178+
/* after that it's only debugging information. */
173179

174180
/* remove the debugging information from the standard libraries */
175181
DISCARD :
@@ -178,8 +184,7 @@ SECTIONS
178184
libm.a ( * )
179185
libgcc.a ( * )
180186
}
181-
182-
187+
183188
/* Stabs debugging sections. */
184189
.stab 0 : { *(.stab) }
185190
.stabstr 0 : { *(.stabstr) }
@@ -212,6 +217,5 @@ SECTIONS
212217
.debug_weaknames 0 : { *(.debug_weaknames) }
213218
.debug_funcnames 0 : { *(.debug_funcnames) }
214219
.debug_typenames 0 : { *(.debug_typenames) }
215-
.debug_varnames 0 : { *(.debug_varnames) }
216-
220+
.debug_varnames 0 : { *(.debug_varnames) }
217221
}

0 commit comments

Comments
 (0)