Value of "__initial_sp"

Hello , 

I am new to ARM cortex M processors and while doing some coding on my board using KEIL  i found that

at location 0x0000_0000 my debugger shows the value "0x2000_0660" . Thats the value of the MSP loaded. 

but i really dont understand how linker arrived at that value using __initial_sp 

i checked in the startup file and found this 

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size EQU 0x00000400

AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp

How this turns out to be __initial_sp = 0x2000_0660 ???

Please help to understand this .

Parents
  • The stack would normally come after and .data or .bss section (I'm not sure why, if you're going to allocate a fixed-size stack anyway.  for "historical" reasons, perhaps - in a traditional small-memory microcontroller .data,.bss, and the heap would start at the beginning of memory and grow upward, while the stack would start at the end of memory and grow downward, and you'd "hope" that they never collided.)

Reply
  • The stack would normally come after and .data or .bss section (I'm not sure why, if you're going to allocate a fixed-size stack anyway.  for "historical" reasons, perhaps - in a traditional small-memory microcontroller .data,.bss, and the heap would start at the beginning of memory and grow upward, while the stack would start at the end of memory and grow downward, and you'd "hope" that they never collided.)

Children