使用keil的Cortex-M3堆栈组织

时间:2015-04-27 13:14:32

标签: cortex-m3 keil

尝试为Atmel sam3s运行blinky样本并检查堆栈指针... SP在main函数的开头具有值0x20000238,对于此样本,它与Ram base + RW + ZI相等。

该芯片的基本RAM地址为:0x20000000 总ram大小为:0x10000

我预计sp会在0x20010000上初始化并且会下降。 任何人都能解释我是不是错了吗?

1 个答案:

答案 0 :(得分:0)

正如派特所说(他/她应该回答这个问题所以我可以接受它,我想), 我错误地认为堆栈默认放在RAM的末尾。但我认为把它放在那里是明智的。

这就是我通过更改散点文件

为我的SAM3S micro做的方法
LR_IROM1 0x00400000 0x00080000  {    ; load region size_region
  ER_IROM1 0x00400000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_STACK 0x2000C000 UNINIT 0x4000 { ; STACK data
   *.o (STACK)
  }
}

RAM base = 0x20000000

总RAM = 64 kb

预期堆栈大小= 16 kb