ARM体系之异常中断

总的可分为两组:同步异常,异步异常

异常向量表

在ARM体系结构中,异常向量表是一个存储器区域,它包含了所有异常的入口地址。当处理器检测到异常时,它会从异常向量表中获取相应的入口地址,并跳转到异常处理程序执行一系列必要的操作

在ARMv7-A架构中,异常向量表通常位于物理内存的地址0x00000000处,占用一段固定的内存空间,每个异常占用4个字节。在处理器复位时,处理器会自动跳转到Reset异常的入口地址。

下面是ARMv7-A架构中异常向量表的地址偏移量和对应的异常类型:

异常类型

地址偏移量(字节)

Reset

0x000

Undefined Instruction

0x004

Software Interrupt (SWI)

0x008

Prefetch Abort

0x00C

Data Abort

0x010

Reserved

0x014

Interrupt Request (IRQ)

0x018

Fast Interrupt Request (FIQ)

0x01C

当处理器发生异常时,它会根据异常类型在异常向量表中查找对应的入口地址,跳转到异常处理程序的入口地址开始执行。在异常处理程序中,通常需要保存当前的处理器状态,进行一些必要的异常处理,恢复处理器状态并返回到原来的程序执行流程。

同步异常

在ARM体系结构中,同步异常是指在指令执行期间产生的异常,通常是由于执行的指令出现了一些错误或者条件不满足而导致的。同步异常可以被捕获并且在指令执行结束之前进行处理,处理完成后再恢复指令执行。

ARM体系结构中的同步异常包括:

  1. Undefined Instruction:当处理器尝试执行一个未定义的指令时会发生此异常。在异常处理程序中,通常需要进行指令解码和处理,并将异常返回地址设置为当前指令地址加上4字节。

  1. Software Interrupt(SWI):SWI指令是一种软件中断指令,用于从非特权模式切换到特权模式并调用操作系统提供的系统服务。当SWI指令执行时,会触发此异常,并跳转到操作系统提供的SWI异常处理程序执行。在操作系统中,SWI指令通常用于实现系统调用,例如文件操作、进程调度等功能。在用户程序中,SWI指令可以用于请求特定的服务,例如进行调试、获取设备信息等。

  1. Prefetch Abort:当处理器尝试从内存中读取指令时,如果发现访问的内存地址无效或者访问权限不足,就会触发此异常。在异常处理程序中,通常需要进行错误处理和恢复,然后将异常返回地址设置为当前指令地址加上8字节。

  1. Data Abort:当处理器尝试访问数据内存时,如果发现访问的内存地址无效或者访问权限不足,就会触发此异常。在异常处理程序中,通常需要进行错误处理和恢复,然后将异常返回地址设置为当前指令地址加上8字节。

这些同步异常在ARM处理器的指令执行期间产生,并且可以被异常处理程序捕获和处理。在异常处理程序中,通常需要进行错误处理和恢复,并将处理器状态返回到正常指令执行流程。

异步异常

在ARM体系结构中,异步异常是指不是由指令执行期间产生的异常,而是由处理器外部事件引起的异常,例如中断请求、系统调试等。异步异常不受指令执行的影响,可以在任何时刻产生,并且不可预测。

ARM体系结构中的异步异常包括:

  1. Interrupt Request(IRQ):是一种标准的中断,用于处理器响应外部设备发来的中断请求。RQ处理程序通常用来处理比较短的、周期性的、低优先级的中断请求。

  1. Fast Interrupt Request(FIQ):是一种高速中断,用于处理那些需要尽快处理、时间非常关键的中断请求。FIQ中断请求具有更高的优先级。IRQ和FIQ是由不同的中断控制器进行管理的,这些中断控制器负责检测中断信号并根据不同的中断类型选择不同的处理程序。FIQ中断时,IRQ被禁止。在x86架构中,IRQ和FIQ的概念并不存在。

  1. Data Abort和Prefetch Abort(内存异常):当处理器访问内存出现错误时,例如地址无效或者访问权限不足等情况,就会触发Data Abort或Prefetch Abort异常。这些异常也属于异步异常,处理器在异常发生时会自动跳转到异常处理程序执行,处理程序通常需要进行错误处理和恢复,最后返回到原来的程序执行流程。

  1. Reset:重置是一种特殊情况。发生重置时,到异常向量表中找到对应异常的处理函数入口,在处理函数中读取重置向量基地址寄存器中保存的BootLoader程序入口地址,将该地址作为程序计数器的初始值,开始执行程序,启动。

总的来说,异步异常是由外部事件引起的,通常需要快速响应和处理,中断服务程序通常要尽可能短且高效,以保证处理器能够及时返回到正常指令执行流程。

猜你喜欢

转载自blog.csdn.net/qq_52353238/article/details/129780507