您的位置 首页 分销

ARM反常向量表初始化

中断向量表的程序设计如下:CODE32AREAStartup,CODE,READONLY;/*异常向量表*/VectorsLDRPC,ResetAddr;把ResetAdde地址上的…

中止向量表的程序设计如下:

CODE32
AREA Startup,CODE,READONLY
; /* 反常向量表 */
Vectors
LDR PC,ResetAddr;把ResetAdde地址上的存储器的内容装载到PC上
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr

ResetAddr DCD ResetInit;为ResetAddr分配以ResetInit地址值,
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD IRQ_Exception
FIQ_Addr DCD FIQ_Handler

此刻ResetAddr实质上只作为一个指针(指向ResetInit),没有分配空间,

ResetAddr地址的存储器上装载的是ResetInit的地址。

ResetInit
BL InitStack ; 初始化仓库
BL TargetBusInit ; 总线体系初始化 (函数中不允许仓库操作)
BLTargetResetInit; 针对方针板的体系初始化

以ResetInit为例,存储器空间分配如下所示:

留意中止向量表要存放在代码段startup的开端处(Entry开端),而程序被链接时,该startup代码段被链接在整个程序的进口地址。

=========================

1. undef exception handler

当时指令,假如CPU不支持,它会主动将该指令交给Co-processor.(如:MMU, FPU)处理。

假如Co-processor也无法辨认这条指令,则发生反常.

2. SWI handler

当履行SWI指令时,发生这种中止.

3. Data abort

由数据反常触发.

一般有3种指令引发数据反常, 这些指令都是访存操作.(都是由MMU引进后才可能会发生的状况)

LDR / STR

SWAP

LDM / STM

MMU的失效类型,又分为5种:

存储拜访失效

地址对齐失效

地址改换失效

域操控器失效

拜访操控权限失效

因而当反常发生后,需求经过拜访CP15来获悉反常发生的详细原因和状况。

4. Pretetch Abort

关于ARM处理器来说,因为其内部使用了哈佛结构—独立的数据的指令总线.

因而,在数据/指令的读取过程中发生的反常也就很自然地能够区别开来

本质上而言,这些反常都是同归于存储拜访失利发生的反常,因而这些反常都由MMU相关,在ARM手册中DataAbort和PrefetchAbort都

称为Memory abort。

Prefetch也就是在预取指令的动作后发生的,当处理器运转到这个无效的指令时(这个无效与undefined exception中的不行辨认不同,

是指不存在或是无法得到)就触发该反常。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部