Subversion Repositories EngineBay2

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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