使用keil的Cortex-M3堆栈组织

Cortex-M3 heap-stack organization using keil

正在尝试 运行 Atmel sam3s 的闪烁样本并检查堆栈指针... SP 在 main 函数开始时的值为 0x20000238,对于此示例,该值也等于 Ram base + RW + ZI。

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

我预计 sp 会在 0x20010000 上初始化并关闭。 谁能解释一下我是不是错了?

正如 Pait 所说(he/she 应该已经回答了问题,所以我认为我可以接受), 我错误地认为默认情况下堆栈将放置在 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 基数 = 0x20000000

总内存 = 64 kb

预期堆栈大小 = 16 kb