Subversion Repositories DashDisplay

Rev

Rev 51 | Rev 58 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 51 Rev 57
Line 1... Line 1...
1
/*
1
/*
2
******************************************************************************
2
*****************************************************************************
3
**
3
**
4
 
4
 
5
**  File        : LinkerScript.ld
5
**  File        : stm32_flash.ld
6
**
6
**
7
**  Author		: Auto-generated by System Workbench for STM32
7
**  Abstract    : Linker script for STM32L152RE Device with
8
**
8
**                512KByte FLASH, 80KByte RAM
9
**  Abstract    : Linker script for STM32L152RETx series
9
**
10
**                512Kbytes FLASH and 80Kbytes RAM
10
**                Set heap size, stack size and stack location according
11
**
11
**                to application requirements.
12
**                Set heap size, stack size and stack location according
12
**
13
**                to application requirements.
13
**                Set memory bank area and size if external memory is used.
14
**
14
**
15
**                Set memory bank area and size if external memory is used.
15
**  Target      : STMicroelectronics STM32
16
**
16
**
17
**  Target      : STMicroelectronics STM32
17
**  Environment : Atollic TrueSTUDIO(R)
18
**
18
**
19
**  Distribution: The file is distributed “as is,” without any warranty
19
**  Distribution: The file is distributed as is, without any warranty
20
**                of any kind.
20
**                of any kind.
21
**
21
**
22
*****************************************************************************
22
**  (c)Copyright Atollic AB.
23
** @attention
23
**  You may use this file as-is or modify it according to the needs of your
24
**
24
**  project. This file may only be built (assembled or compiled and linked)
25
** <h2><center>&copy; COPYRIGHT(c) 2019 STMicroelectronics</center></h2>
25
**  using the Atollic TrueSTUDIO(R) product. The use of this file together
26
**
26
**  with other tools than Atollic TrueSTUDIO(R) is not permitted.
27
** Redistribution and use in source and binary forms, with or without modification,
27
**
28
** are permitted provided that the following conditions are met:
28
*****************************************************************************
29
**   1. Redistributions of source code must retain the above copyright notice,
29
*/
30
**      this list of conditions and the following disclaimer.
30
 
31
**   2. Redistributions in binary form must reproduce the above copyright notice,
31
/* Entry Point */
32
**      this list of conditions and the following disclaimer in the documentation
32
ENTRY(Reset_Handler)
33
**      and/or other materials provided with the distribution.
33
 
34
**   3. Neither the name of STMicroelectronics nor the names of its contributors
34
/* Highest address of the user mode stack */
35
**      may be used to endorse or promote products derived from this software
35
_estack = 0x20014000;    /* end of RAM */
36
**      without specific prior written permission.
36
/* Generate a link error if heap and stack don't fit into RAM */
37
**
37
_Min_Heap_Size = 0x200;      /* required amount of heap  */
38
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
38
_Min_Stack_Size = 0x400; /* required amount of stack */
39
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
39
 
40
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40
/* Specify the memory areas */
41
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
41
MEMORY
42
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
42
{
43
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
43
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 512K
44
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
44
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 80K
45
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45
NVRAM (rx)     : ORIGIN = 0x08080000, LENGTH = 4K
46
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
46
}
47
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47
 
48
**
48
/* Define output sections */
49
*****************************************************************************
49
SECTIONS
50
*/
50
{
51
 
51
  /* The startup code goes first into FLASH */
52
/* Entry Point */
52
  .isr_vector :
53
ENTRY(Reset_Handler)
53
  {
54
 
54
    . = ALIGN(4);
55
/* Highest address of the user mode stack */
55
    KEEP(*(.isr_vector)) /* Startup code */
56
_estack = 0x20014000;    /* end of RAM */
56
    . = ALIGN(4);
57
/* Generate a link error if heap and stack don't fit into RAM */
57
  } >FLASH
58
_Min_Heap_Size = 0x200;      /* required amount of heap  */
58
 
59
_Min_Stack_Size = 0x400; /* required amount of stack */
59
  /* The program code and other data goes into FLASH */
60
 
60
  .text :
61
/* Specify the memory areas */
61
  {
62
MEMORY
62
    . = ALIGN(4);
63
{
63
    *(.text)           /* .text sections (code) */
64
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 80K
64
    *(.text*)          /* .text* sections (code) */
65
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 512K
65
    *(.glue_7)         /* glue arm to thumb code */
66
}
66
    *(.glue_7t)        /* glue thumb to arm code */
67
 
67
    *(.eh_frame)
68
/* Define output sections */
68
 
69
SECTIONS
69
    KEEP (*(.init))
70
{
70
    KEEP (*(.fini))
71
  /* The startup code goes first into FLASH */
71
 
72
  .isr_vector :
72
    . = ALIGN(4);
73
  {
73
    _etext = .;        /* define a global symbols at end of code */
74
    . = ALIGN(4);
74
  } >FLASH
75
    KEEP(*(.isr_vector)) /* Startup code */
75
 
76
    . = ALIGN(4);
76
  /* Constant data goes into FLASH */
77
  } >FLASH
77
  .rodata :
78
 
78
  {
79
  /* The program code and other data goes into FLASH */
79
    . = ALIGN(4);
80
  .text :
80
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
81
  {
81
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
82
    . = ALIGN(4);
82
    . = ALIGN(4);
83
    *(.text)           /* .text sections (code) */
83
  } >FLASH
84
    *(.text*)          /* .text* sections (code) */
84
 
85
    *(.glue_7)         /* glue arm to thumb code */
85
  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
86
    *(.glue_7t)        /* glue thumb to arm code */
86
  .ARM : {
87
    *(.eh_frame)
87
    __exidx_start = .;
88
 
88
    *(.ARM.exidx*)
89
    KEEP (*(.init))
89
    __exidx_end = .;
90
    KEEP (*(.fini))
90
  } >FLASH
91
 
91
 
92
    . = ALIGN(4);
92
  .preinit_array     :
93
    _etext = .;        /* define a global symbols at end of code */
93
  {
94
  } >FLASH
94
    PROVIDE_HIDDEN (__preinit_array_start = .);
95
 
95
    KEEP (*(.preinit_array*))
96
  /* Constant data goes into FLASH */
96
    PROVIDE_HIDDEN (__preinit_array_end = .);
97
  .rodata :
97
  } >FLASH
98
  {
98
  .init_array :
99
    . = ALIGN(4);
99
  {
100
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
100
    PROVIDE_HIDDEN (__init_array_start = .);
101
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
101
    KEEP (*(SORT(.init_array.*)))
102
    . = ALIGN(4);
102
    KEEP (*(.init_array*))
103
  } >FLASH
103
    PROVIDE_HIDDEN (__init_array_end = .);
104
 
104
  } >FLASH
105
  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
105
  .fini_array :
106
  .ARM : {
106
  {
107
    __exidx_start = .;
107
    PROVIDE_HIDDEN (__fini_array_start = .);
108
    *(.ARM.exidx*)
108
    KEEP (*(SORT(.fini_array.*)))
109
    __exidx_end = .;
109
    KEEP (*(.fini_array*))
110
  } >FLASH
110
    PROVIDE_HIDDEN (__fini_array_end = .);
111
 
111
  } >FLASH
112
  .preinit_array     :
112
 
113
  {
113
  /* used by the startup to initialize data */
114
    PROVIDE_HIDDEN (__preinit_array_start = .);
114
  _sidata = LOADADDR(.data);
115
    KEEP (*(.preinit_array*))
115
 
116
    PROVIDE_HIDDEN (__preinit_array_end = .);
116
  /* Initialized data sections goes into RAM, load LMA copy after code */
117
  } >FLASH
117
  .data : 
118
  .init_array :
118
  {
119
  {
119
    . = ALIGN(4);
120
    PROVIDE_HIDDEN (__init_array_start = .);
120
    _sdata = .;        /* create a global symbol at data start */
121
    KEEP (*(SORT(.init_array.*)))
121
    *(.data)           /* .data sections */
122
    KEEP (*(.init_array*))
122
    *(.data*)          /* .data* sections */
123
    PROVIDE_HIDDEN (__init_array_end = .);
123
 
124
  } >FLASH
124
    . = ALIGN(4);
125
  .fini_array :
125
    _edata = .;        /* define a global symbol at data end */
126
  {
126
  } >RAM AT> FLASH
127
    PROVIDE_HIDDEN (__fini_array_start = .);
127
 
128
    KEEP (*(SORT(.fini_array.*)))
128
  
129
    KEEP (*(.fini_array*))
129
  /* Uninitialized data section */
130
    PROVIDE_HIDDEN (__fini_array_end = .);
130
  . = ALIGN(4);
131
  } >FLASH
131
  .bss :
132
 
132
  {
133
  /* used by the startup to initialize data */
133
    /* This is used by the startup in order to initialize the .bss secion */
134
  _sidata = LOADADDR(.data);
134
    _sbss = .;         /* define a global symbol at bss start */
135
 
135
    __bss_start__ = _sbss;
136
  /* Initialized data sections goes into RAM, load LMA copy after code */
136
    *(.bss)
137
  .data : 
137
    *(.bss*)
138
  {
138
    *(COMMON)
139
    . = ALIGN(4);
139
 
140
    _sdata = .;        /* create a global symbol at data start */
140
    . = ALIGN(4);
141
    *(.data)           /* .data sections */
141
    _ebss = .;         /* define a global symbol at bss end */
142
    *(.data*)          /* .data* sections */
142
    __bss_end__ = _ebss;
143
 
143
  } >RAM
144
    . = ALIGN(4);
144
 
145
    _edata = .;        /* define a global symbol at data end */
145
  /* User_heap_stack section, used to check that there is enough RAM left */
146
  } >RAM AT> FLASH
146
  ._user_heap_stack :
147
 
147
  {
148
  
148
    . = ALIGN(4);
149
  /* Uninitialized data section */
149
    PROVIDE ( end = . );
150
  . = ALIGN(4);
150
    PROVIDE ( _end = . );
151
  .bss :
151
    . = . + _Min_Heap_Size;
152
  {
152
    . = . + _Min_Stack_Size;
153
    /* This is used by the startup in order to initialize the .bss secion */
153
    . = ALIGN(4);
154
    _sbss = .;         /* define a global symbol at bss start */
154
  } >RAM
155
    __bss_start__ = _sbss;
155
 
156
    *(.bss)
156
  
157
    *(.bss*)
157
 
158
    *(COMMON)
158
  /* Remove information from the standard libraries */
159
 
159
  /DISCARD/ :
160
    . = ALIGN(4);
160
  {
161
    _ebss = .;         /* define a global symbol at bss end */
161
    libc.a ( * )
162
    __bss_end__ = _ebss;
162
    libm.a ( * )
163
  } >RAM
163
    libgcc.a ( * )
164
 
164
  }
165
  /* User_heap_stack section, used to check that there is enough RAM left */
165
 
166
  ._user_heap_stack :
166
 
167
  {
167
 /* NVRAM image section : nothing gets stored here but the addresses are set up */
168
    . = ALIGN(8);
168
    .nvram_data (NOLOAD) :  
169
    PROVIDE ( end = . );
169
   {
170
    PROVIDE ( _end = . );
170
   _nvr_base = .;
171
    . = . + _Min_Heap_Size;
171
    KEEP ( *(.NVRAM_Data)) /* any __attribute__((section(".NVRAM_Data"))) section info to be put in here  */
172
    . = . + _Min_Stack_Size;
172
   } >NVRAM 
173
    . = ALIGN(8);
173
 
174
  } >RAM
174
 
175
 
175
 
176
  
176
   PROVIDE ( NVRAM_Base  = _nvr_base ); 
177
 
177
 
178
  /* Remove information from the standard libraries */
178
 
179
  /DISCARD/ :
179
  .ARM.attributes 0 : { *(.ARM.attributes) }
180
  {
180
}
181
    libc.a ( * )
181
 
182
    libm.a ( * )
182
 
183
    libgcc.a ( * )
-
 
184
  }
-
 
185
 
-
 
186
  .ARM.attributes 0 : { *(.ARM.attributes) }
-
 
187
}
-
 
188
 
-
 
189
 
-