您的位置 首页 元件

ARM编程:ARM初始化,仓库地址是怎样核算的

USR_STACK_LEGTHEQU64SVC_STACK_LEGTHEQU0FIQ_STACK_LEGTHEQU16IRQ_STACK_LEGTHEQU64ABT_STACK_LEGTHEQU0UN

USR_STACK_LEGTHEQU64
SVC_STACK_LEGTHEQU0
FIQ_STACK_LEGTHEQU16
IRQ_STACK_LEGTHEQU64
ABT_STACK_LEGTHEQU0
UND_STACK_LEGTHEQU0
;称号:InitStack
;功用:仓库初始化,即初始化各形式下的仓库指针
;进口参数:无
;出口参数:无
;阐明:在特权形式下调用此子程序,比方复位后的管理形式
InitStack
MOVR0,LR;R0<=LR,由于各种形式下R0是相同

;设置管理形式仓库
MSRCPSR_c,#0xd3
LDRSP,StackSvc
;设置间断形式仓库
MSRCPSR_c,#0xd2
LDRSP,StackIrq
;设置快速间断形式仓库
MSRCPSR_c,#0xd1
LDRSP,StackFiq
;设置间断形式仓库
MSRCPSR_c,#0xd7
LDRSP,StackAbt
;设置未界说形式仓库
MSRCPSR_c,#0xdb
LDRSP,StackUnd
;设置体系形式仓库
MSRCPSR_c,#0xdf
LDRSP,StackUsr

MOVPC,R0

StackUsrDCDUsrStackSpace+(USR_STACK_LEGTH1)*4
StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH1)*4
StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH1)*4
StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH1)*4
StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH1)*4
StackUndDCDUndtStackSpace+(UND_STACK_LEGTH1)*4

;分配仓库空间
AREAMyStacks,DATA,NOINIT,ALIGN=2
UsrStackSpaceSPACEUSR_STACK_LEGTH*4;用户(体系)形式仓库空间
SvcStackSpaceSPACESVC_STACK_LEGTH*4;管理形式仓库空间
IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;间断形式仓库空间
FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;快速间断形式仓库空间
AbtStackSpaceSPACEABT_STACK_LEGTH*4;间断义形式仓库空间
UndtStackSpaceSPACEUND_STACK_LEGTH*4;未界说形式仓库

通过ADS1.2仿真;发现地址改变如下
svc0x400030fc
irq0x400031fc
fiq0x4000323c
abort0x4000323c
undef0x4000323c
sys0x400030fc

svcfirirqabortundefsys的地址是怎样计算出来的?

  • 关键是MyStacks的开始地址.看看ADS的装备里linker选项里的装备. [xiaogang]2007-4-1611:57:05

    假如没有装备.则看AREAMyStacks,DATA,NOINIT,ALIGN=2后边是否有个
    ^XXXXX..来界说MyStacks的开始地址
    得到开始地址后,再由SPACE按次序分配内存空间

  • 对,RWBase设置的是0x40003000 [jinjing999666]2007-4-1620:40:08

    我又把RWBase设置的是0x40005000
    调查都变成了
    svc0x400050fc
    irq0x400051fc
    fiq0x4000523c
    undef0x4000523c
    sys0x400050fc

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/256503.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部