| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> ARM的异常处理机制 -> 正文阅读 |
|
[嵌入式]ARM的异常处理机制 |
异常种类ARM共有如下7种异常模式:
异常中断向量表????????当异常发生时,CPU会主动将PC赋值为低地址或高地址,该地址处有一条指令用于处理该类型异常,我们将存储这些指令的地方称为异常中断向量表。ARM规定每个向量占用4字节空间(通常会放一个跳转指令或一个向PC寄存器赋值的数据访问指令。通过这两种指令,将程序跳转到相应的异常中断处理程序处执行),共32个字节。 ????????异常发生时,ARM会将处理其切换到对应的模式来处理异常。此外,不同种类的异常有可能会同时发生,此时ARM会按照一定的优先级策略来处理这些异常。 ????????上述相关的信息见下表所示。 ? ????????图中未定义指令与软件中断异常的优先级都是6,这其实没有关系,因为这两类异常不可能同时发生。? 异常处理????????要实际处理上述七种异常,需要软硬件的协同,这里记录的是硬件对异常的处理步骤,并不涉及软件部分。在实际编程过程中,只有首先明白硬件对异常处理逻辑后,才能正确的进行软件处理。 ????????硬件对异常的处理分为两部分:发生异常时的处理(进入部分)和异常结束处理(离开部分),而且无论是哪种异常,硬件对它们的处理过程大致相同,只有个别的细节不同,下面首先讨论共性,然后再具体类型具体说明。 进入部分????????当异常发生时,处理器大致按照如下的流程进行处理:
????????上述过程用伪代码表示为:
复位异常
????????注意:复位异常的处理是不需要返回的,所以其R14和SPSR的值是未定义的。 未定义指令异常
SWI软件中断
指令预取中止异常中断
数据访问中止异常中断
IRQ异常
FIQ异常
离开部分????????当异常处理结束后,需要执行如下两步操作才能返回到被异常中断的地方继续执行:
SWI软件中断未定义指令异常中断????????由于这两种异常是在指令执行过程中发生的,此时PC指向当前指令后面的第二条指令(对于ARM状态为当前指令地址加8,对于THUMB状态为当前指令地址加4),因为在中断发生时,处理器将PC-4的结果保存到了lr_mode中,所以在返回时,只需要直接将lr_mode的值复制到PC中即可。 IRQ和FIR异常中断????????因为对IRQ和FIQ的处理是在一条指令结束时发生的,此时PC的值指向当前指令后面的第三条指令(对于ARM状态为当前指令地址加12,对于THUMB状态为当前指令地址加6),因为在中断发生时,处理器将PC-4的结果保存到了lr_mode中,所以在返回时,需要将lr_mode-4的结果赋值给PC。 指令预取中止异常????????指令预取中止异常虽然在指令的取址阶段就发生了,但是真正对该异常的处理是在执行该指令时发生的,此时PC的值指向当前指令后面的第二条指令(对于ARM状态为当前指令地址加8,对于THUMB状态为当前指令地址加4)。该异常的处理结束返回时,应该返回到产生该异常的指令地址处重新执行该指令,而不是返回到产生该异常的指令的下一条指令处执行。因为在中断发生时,处理器将PC-4的结果保存到了lr_mode中,所以在返回时,需要将lr_mode-4的结果赋值给PC。 数据访问中止异常????????发生该异常时,PC指向当前指令后面的第三条指令(对于ARM状态为当前指令地址加12,对于THUMB状态为当前指令地址加6)。同样的,对该异常的处理返回时,应该返回到产生该异常的指令地址处重新执行该指令。因为在中断发生时,处理器将PC-4的结果保存到了lr_mode中,所以在返回时,需要将lr_mode-8的结果赋值给PC。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:42:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |