Subversion Repositories DashDisplay

Rev

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

Rev Author Line No. Line
34 mjames 1
/*
2
*****************************************************************************
3
**
4
 
5
**  File        : stm32_flash.ld
6
**
7
**  Abstract    : Linker script for STM32L152RE 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
**  Environment : Atollic TrueSTUDIO(R)
18
**
19
**  Distribution: The file is distributed as is, without any warranty
20
**                of any kind.
21
**
22
**  (c)Copyright Atollic AB.
23
**  You may use this file as-is or modify it according to the needs of your
24
**  project. This file may only be built (assembled or compiled and linked)
25
**  using the Atollic TrueSTUDIO(R) product. The use of this file together
26
**  with other tools than Atollic TrueSTUDIO(R) is not permitted.
27
**
28
*****************************************************************************
29
*/
30
 
31
/* Entry Point */
32
ENTRY(Reset_Handler)
33
 
34
/* Highest address of the user mode stack */
35
_estack = 0x20014000;    /* end of RAM */
36
/* Generate a link error if heap and stack don't fit into RAM */
37
_Min_Heap_Size = 0x200;      /* required amount of heap  */
38
_Min_Stack_Size = 0x400; /* required amount of stack */
39
 
40
/* Specify the memory areas */
41
MEMORY
42
{
43
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 512K
44
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 80K
45
NVRAM (rx)     : ORIGIN = 0x08080000, LENGTH = 4K
46
}
47
 
48
/* Define output sections */
49
SECTIONS
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(4);
149
    PROVIDE ( end = . );
150
    PROVIDE ( _end = . );
151
    . = . + _Min_Heap_Size;
152
    . = . + _Min_Stack_Size;
153
    . = ALIGN(4);
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
 
167
 /* NVRAM image section : nothing gets stored here but the addresses are set up */
168
    .nvram_data (NOLOAD) :  
169
   {
170
   _nvr_base = .;
171
    KEEP ( *(.NVRAM_Data)) /* any __attribute__((section(".NVRAM_Data"))) section info to be put in here  */
172
   } >NVRAM 
173
   PROVIDE ( NVRAM_Base  = _nvr_base ); 
174
 
175
 
176
  .ARM.attributes 0 : { *(.ARM.attributes) }
177
}
178
 
179