主题 : 关于初始化代码中栈部分的疑问 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 21258
精华: 1
发帖: 120
金钱: 655 两
威望: 131 点
贡献值: 1 点
综合积分: 260 分
注册时间: 2010-05-13
最后登录: 2023-11-17
楼主  发表于: 2010-08-13 09:40

 关于初始化代码中栈部分的疑问

管理提醒: 本帖被 kasim 执行加亮操作(2010-08-13)
看到初始化的代码中会调用栈,代码如下
InitStacks
    ;Don't use DRAM,such as stmfd,ldmfd......
    ;SVCstack is initialized before
    ;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
    mrs    r0,cpsr
    bic    r0,r0,#MODEMASK
    orr    r1,r0,#UNDEFMODE|NOINT
    msr    cpsr_cxsf,r1        ;UndefMode
    ldr    sp,=UndefStack        ; UndefStack=0x33FF_5C00

    orr    r1,r0,#ABORTMODE|NOINT
    msr    cpsr_cxsf,r1        ;AbortMode
    ldr    sp,=AbortStack        ; AbortStack=0x33FF_6000

    orr    r1,r0,#IRQMODE|NOINT
    msr    cpsr_cxsf,r1        ;IRQMode
    ldr    sp,=IRQStack        ; IRQStack=0x33FF_7000

    orr    r1,r0,#FIQMODE|NOINT
    msr    cpsr_cxsf,r1        ;FIQMode
    ldr    sp,=FIQStack        ; FIQStack=0x33FF_8000

    bic    r0,r0,#MODEMASK|NOINT
    orr    r1,r0,#SVCMODE
    msr    cpsr_cxsf,r1        ;SVCMode
    ldr    sp,=SVCStack        ; SVCStack=0x33FF_5800


cpu切换到各种模式下,然后分别在当前模式下保留一段空间当做栈。
但我找了一下,之后代码里没看到去用他们啊。具体例子,SVCstack这些空间我去帮他留了,但系统怎么用的呢,何时用的呢?难道是自动的?
IRQ栈,也是,当我发生中断的时候,它就自动用了这些栈空间了吗?