的异常处理_浅谈ARM处理器的七种异常处理

昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq),数据访问中止模式Abort(abt),未定义指令中止模式Undfined(und)。

今天我们来谈谈ARM处理器所支持的七种异常处理。

9601d8024b5955fbb310ec31a8b22f0b.png

ARM处理器的异常

当程序在正常执行过程中,出现暂时停止时,我们称之为发生了异常。比如说,在程序执行过程中,接到一个外部的中断申请。

处理器在接到中断申请之后,一般要经过下面的步骤:

  1. 保留当前处理器状态;
  2. 处理中断;
  3. 返回中断前状态,继续执行中断前程序。

当有多个中断同时申请时,处理器将按照优先级,顺次进行处理。

需要指出的是,异常并不完全等同与中断,中断只是ARM所支持异常类型的一种。

0d2b01caef18d7245f0d4a5d28fc95b6.png

ARM所支持的异常类型

ARM体系处理器支持的异常处理有7种,下表列出了ARM体系处理器支持的异常及各异常的含义。

  • 复位

在复位电平有效时,就会产生复位异常,程序跳转到复位处理程序处执行。复位向量地址是0x00000000开始连续四个字节。复位异常通常用在:系统加电时,系统复位时,跳转到复位向量地址。

  • 未定义指令

当遇到不能处理的指令时,产生未定义指令异常。向量地址为:0x00000004开始连续四个字节。

  • 软件中断

执行SWI指令产生,用于用户模式下的程序调用特权操作指令。在实时操作系统(RTOS)中可以通过该机制实现系统功能调用。向量地址为:0x00000008开始连续四个字节。

  • 指令预取中止

处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生此类异常。向量地址为:0x0000000C开始连续四个字节。

  • 数据中止

处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。向量地址为:0x00000010开始连续四个字节。

  • IRQ

外部中断请求有效,且CPSR中的I位为0时,产生IRQ异常。向量地址为:0x00000018开始连续四个字节。

  • FIQ

快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。向量地址为:0x0000001C开始连续四个字节。

ARM处理器对异常的响应过程

如果一个异常出现,复位异常会立即中止当前指令执行,除此之外的其他异常,处理器会尽可能完成当前指令,然后再去处理异常。对异常的响应一般分为以下几步:

  1. 保存下一条指令的地址(PC)到相应连接寄存器LR_mode中,当处理完异常返回时,从异常发生前的地址处,重新开始执行。
  2. 将CPSR的内容复制到,将要执行的异常模式对应的SPSR_中。
  3. 设置当前状态寄存器CPSR的相关位。
  4. 强制PC从相关的异常向量地址,取下一条指令执行,从而跳转到相应的异常处理程序处。
c524021d4efa3cf8a6ae93ae7a991e50.png

ARM处理器从异常处理中返回过程

在处理完异常之后,恢复用户任务的正常执行,即从异常处理中返回。ARM处理器从异常中返回,一般分为以下几步:

  1. 从处理程序的保护堆栈中,恢复异常处理中用过的用户寄存器。
  2. 将相应SPSR_内容复制回CPSR中,以恢复异常出现前的程序状态。若在进入异常处理时设置了中断控制位,要在此时清除。
  3. 将连接寄存器LR_的值减去相应的偏移量后送到PC中。

小结

今天我们谈了ARM处理器的七种异常情况,并介绍了对异常的响应过程,和返回过程。深入了解今天的内容,是使用ARM处理器实现嵌入式系统编程的前提。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值