ARM7 的启动

来源:互联网 发布:日本刘姓 知乎 编辑:程序博客网 时间:2024/05/16 06:52
..\keil\arm\..\startup.s是keil提供的通用的启动代码,可以满足大多数的使用要求。
Vectors
LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP ; Reserved Vector
; LDR PC, IRQ_Addr
LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr
LDR PC, FIQ_Addr

Reset_Addr DCD Reset_Handler
Undef_Addr DCD Undef_Handler
SWI_Addr DCD SWI_Handler
PAbt_Addr DCD PAbt_Handler
DAbt_Addr DCD DAbt_Handler
DCD 0 ; Reserved Address
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler

Undef_Handler B Undef_Handler
SWI_Handler B SWI_Handler
PAbt_Handler B PAbt_Handler
DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B FIQ_Handler

所以DCD的语句声明了向量的入口地址(标号地址),进入向量后执行的就是B语句,相当与51汇编
LJMP $;
设计者可以根据需要修改进入向量后执行的语句。
追问
Undef_Handler   B       Undef_Handler谢谢您,按照上面的说法,那这就是相当于一个原地循环,是吗?那请问这样有什么意义呢?你看我这样理解对不对呢,就是通过Reset_Addr      DCD     Reset_Handler这一句后,其实Reset_Addr和Reset_Handler所代表的地址其实是一样的,不知道这样理解对不对呢?
追答
1.Undef_Handler   B       Undef_Handler相当于原地循环。这是异常的简单处理方式,你可以自己重新修改进入向量需要执行的语句。2.应该说是对的。LDR     PC, Undef_AddrUndef_Addr      DCD     Undef_HandlerUndef_Handler   B       Undef_Handler比如通过该语句,编译器知道了未定义异常向量的入口地址。如果出现未定义指令异常,通过向量表转向Undef_Handler对应的地址执行Undef_Handler   B       Undef_Handler。
原创粉丝点击