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_LEGTH–1)*4
StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH–1)*4
StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH–1)*4
StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH–1)*4
StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH–1)*4
StackUndDCDUndtStackSpace+(UND_STACK_LEGTH–1)*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