【发布时间】:2016-03-03 17:50:18
【问题描述】:
我在从 Keil 获取的 Cortex-M3 启动文件中有以下示例代码(使用 Microlib 编译)。
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
EXPORT __initial_sp
Stack_Size EQU 0x00000100
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
这个区域最终被放入一个 RAM 区域,从地址 0x20000000 开始,可执行区域的大小在 scatter 文件中为 0x400。
当我进入调试器时,我看到内存地址0x0 的值是0x20000118,这是初始堆栈指针,甚至寄存器窗口也将msp 寄存器显示为0x20000118。
但我的理解是堆栈的开始将从0x20000100 开始,因为上面的代码 sn-p 就是这样做的。
我无法知道这些额外的 0x18 字节是从哪里来的。
另外,我刚刚关闭了 Microlib 模式,现在我看到初始堆栈指针是 0x20000120。
同样,这些额外的 0x20 字节偏移量从哪里到堆栈指针。
为什么堆栈不是从我想要的位置开始(0x20000100),而是有一些额外的偏移量?
【问题讨论】: