我在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
而这个区域最终置入开始在与可执行区域的大小地址0x20000000
一个RAM区域说,在分散文件0x400
。
当我到调试器我看到,在存储器地址0x0
值为0x20000118
这是初始堆栈指针和甚至寄存器窗口显示msp
寄存器作为0x20000118
。
但我的理解是,堆栈的开始是从0x20000100
因为这是上面的代码片断在做什么。
我无法从那里是这些额外0x18
个字节来获得。
另外,我刚关闭microlib中模式,现在我看到初始堆栈指针是0x20000120
。
再次,从这些额外的0x20
字节偏移量来自堆栈指针。
为什么不能叠加从那里我希望它是(0x20000100
)开始,而不是一些额外的补偿?