打印
[ZLG-ARM]

LPC2000 stack问题,请大家请教!多谢!!1

[复制链接]
1308|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
han831|  楼主 | 2007-4-29 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在LPC2131移植uC/OS_ii时,看到启动代码中的几个特殊模式的堆栈分配程序如下:
  InitStack    
        MOV     R0, LR
;Build the SVC stack
;设置管理模式堆栈
        MSR     CPSR_c, #0xd3  
        LDR     SP, StackSvc 
;Build the IRQ stack 
AREA    MyStacks, DATA, NOINIT, ALIGN=2
SvcStackSpace      SPACE   SVC_STACK_LEGTH * 4  ;Stack spaces for Administration Mode 管理模式堆栈空间
IrqStackSpace      SPACE   IRQ_STACK_LEGTH * 4  ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间
FiqStackSpace      SPACE   FIQ_STACK_LEGTH * 4  ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间
AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4  ;Stack spaces for Suspend Mode 中止义模式堆栈空间
UndtStackSpace     SPACE   UND_STACK_LEGTH * 4  ;Stack spaces for Undefined Mode 未定义模式堆栈

问题:MyStacks被分配到0x40001800,但排在第一位的StackSvc 为什么是0x4000185C呢?那5C个字节都放了些什么内容啊?多谢!

相关帖子

沙发
zlgARM| | 2007-4-30 15:40 | 只看该作者

han831

StackSvc是Svc模式下的堆栈指针的初始值,而MyStacks则是堆栈空间的起始值。这两个概念没有直接的联系。

您可以看一下《ARM基础教程》里对堆栈的生长方向、满堆栈、空堆栈等概念的叙述。

最后画一个Svc堆栈空间的图,它的初始堆栈指针在何处,它的大小是否符合代码里的指定?压栈出栈时,堆栈将如何变化?堆栈的顶部和底部地址是多少?

准确将SVC堆栈空间的图画出来,有助于您对所提到的问题的理解。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

1

粉丝