ARM 处理器异常处理机制详解

news2024/11/15 13:25:31

目录

异常

异常源

异常处理

异常向量表

安装设置异常向量表及保存现场指令

异常处理的返回

异常源与异常模式对应关系

异常响应优先级


ARM7-11 有7种基本工作模式,而 Cortex-A 系列处理器则额外支持 Monitor 模式:

  • User:非特权模式,大部分任务执行在这种模式。
  • FIQ:当一个高优先级(fast)中断产生时将会进入这种模式。
  • IRQ:当一个低优先级(normal)中断产生时将会进入这种模式。
  • Supervisor/SVC:当复位或软中断指令执行时将会进入这种模式。
  • Abort:当存取异常时将会进入这种模式。
  • Undef:当执行未定义指令时会进入这种模式。
  • System:使用和 User 模式相同寄存器集的特权模式。
  • Monitor:Cortex-A 特有模式,用于执行安全监控代码的模式;也是一种特权模式。

异常

异常是处理器处理特定事件的方式,中断是异常的一种形式。处理器遇到异常后会暂停当前的程序转而去处理异常(执行异常处理程序),处理完成后返回到被异常打断的代码处继续执行。

异常源

导致异常产生的事件有7个:

  1. Reset 复位异常:当 CPU 刚上电或按下 reset 重启键之后进入该异常,该异常在 SVC 模式下处理。
  2. IRQ/FIQ 一般/快速中断请求:CPU 和外部设备是分别独立的硬件执行单元,CPU 要想知道外部设备的运行状态,需要通过中断请求,根据请求的紧急情况分为一般中断和快速中断。
  3. PrefetchAbort 预取指令中止异常:该异常发生在 CPU 流水线取指阶段,如果目标指令地址是非法地址进入该异常,该异常在 Abort 模式下处理。
  4. Undef 未定义指令异常:该异常发生在流水线技术里的译码阶段,如果当前指令不能被识别为有效指令,产生未定义指令异常,该异常在 Undef 模式下处理。
  5. SWI 软件中断指令异常:该异常是应用程序自己调用时产生的,用于用户程序申请访问硬件资源时,例如:printf() 打印函数,该异常在 SVC 模式下处理。
  6. DataAbort 数据中止访问异常:该异常发生在要访问数据地址不存在或者为非法地址时,该异常在 Abort 模式下处理。
异常处理

异常处理的步骤(自动完成):

  1. 保存执行状态:将当前的 CPSR 保存到 SPSR_<mode> 中。
  2. 模式切换:进入 ARM 状态,并进入相应的异常模式,同时禁止相应中断。
  3. 保存返回地址:跳转到异常处理之前,将 PC 下一条指令地址保存到 LR_<mode> 中。
  4. 设置 PC 为相应的异常向量地址:修改 PC 切换到异常处理位置。
异常向量表

异常向量表是处于内存中的一段空间,为每个异常源分配了四个字节的存储空间。当产生了异常后 PC 的值会自动变成该异常源在异常向量表中的地址。我们可以在这段地址写一条跳转指令使其跳转到异常处理程序入口。

安装设置异常向量表及保存现场指令
  1. 安装异常向量表:我们可以通过简单的使用下面的指令来安装异常向量表:
    b reset   ; 跳入 reset 处理程序
    b undef_handler ; 跳入未定义处理程序
    b swi_handler    ; 跳入软中断处理程序
    b pref_handler  ; 跳入预取指令处理程序
    b data_handler   ; 跳入数据访问中止处理程序
    b res ; 跳入未使用程序
    b irq_handler   ; 跳入中断处理程序
    b fiq_handler  ; 跳入快速中断处理程序
  2. 保存执行现场:异常处理程序最开始,要保存被打断程序的执行现场,可以通过下面的栈操作指令实现保存现场:
    stmfd sp!, {r0-r1, lr}

    需要注意的是,在跳转到异常处理程序入口时,已经切换到对应异常模式下了,因此这里的SP是异常模式下的SP了,所以被打断程序现场(寄存器数据)是保存在异常模式下的栈里,上述指令将R0~R1全部都保存到了异常模式栈,最后将修改完的被打断程序返回地址入栈保存,之所以保存该返回地址就是将来可以通过类似:MOV PC, LR的指令,返回用户程序继续执行。

    异常发生后,要针对异常类型进行处理,因此,每种异常都有自己的异常处理程序,中断异常处理过程通过系统中断处理来进行分析。

异常处理的返回

异常处理完成之后,返回被打断程序继续执行,具体操作如下:

  1. 恢复被打断程序运行时寄存器数据(从栈中恢复)。
  2. 恢复程序运行时状态 CPSR(恢复 SPSR_<mode> 到 CPSR)。
  3. 通过进入异常时保存的返回地址,返回到被打断程序继续执行(恢复 LR_<mode> 到 PC)。
异常源与异常模式对应关系
  • 异常源:FIQ、IRQ、Reset/软中断、DataAbort/PrefetchAbort、Undef。
  • 异常模式:FIQ、IRQ、SVC、Abort、Undef。
异常响应优先级
  • 优先级:Reset、Data Abort、FIQ、IRQ、Prefetch Abort、SWI、Undefined instruction。
  • 从高到低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试流程自动化实践!

测试流程自动化的最佳实践涉及多个方面&#xff0c;旨在提高测试效率、确保测试质量&#xff0c;并降低测试成本。以下是一些关键的实践方法&#xff1a; 1. 明确测试目标 确定测试范围&#xff1a;在开始自动化测试之前&#xff0c;需要明确哪些功能、模块或场景需要被测试。…

Leetcode JAVA刷刷站(39)组合总和

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用回溯算法来找到所有可能的组合&#xff0c;使得组合中的数字之和等于目标数 target。因为数组中的元素可以无限制地重复选择&#xff0c;所以在回溯过程中&#xff0c;我们不需要跳过已经选择的元素&#x…

python爬虫爬取某图书网页实例

文章目录 导入相应的库正确地设置代码的基础部分设置循环遍历遍历URL保存图片和文档全部代码即详细注释 下面是通过requests库来对ajax页面进行爬取的案例&#xff0c;与正常页面不同&#xff0c;这里我们获取url的方式也会不同&#xff0c;这里我们通过爬取一个简单的ajax小说…

第N6周:中文文本分类-Pytorch实现

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 一、准备工作 任务说明 本次将使用PyTorch实现中文文本分类。主要代码与N1周基本一致&#xff0c;不同的是本次任务中使用了本地的中文数据&#xff0c;数据示例如下&#xff1a; 任务&#xff1a; ●1…

Diffusion Model相关论文解析之(二)DENOISING DIFFUSION IMPLICIT MODELS

目录 1、摘要2、创新点3、主要公式4、自己的理解&#xff0c;对错不确定 1、摘要 ‌Denoising Diffusion Implicit Models (DDIM)‌是一种扩散模型的改进版本&#xff0c;旨在加速采样过程并提高采样速度。DDIM通过引入非马尔可夫扩散过程&#xff0c;相对于传统的去噪扩散概率…

H. Ksyusha and the Loaded Set

https://codeforces.com/contest/2000/problem/H div3 H 一开始看就感觉要维护一些比较有趣的量 看了一下数据范围ai<2e6,k<2e6 似乎可以直接开一个线段树来表示是否存在集合当中 我们开4e6维护每个数字是否存在&#xff0c;ai2e6时候k2e6&#xff0c;最大是4e6 存在…

用python 实现一个简易的“我的世界”游戏(超详细教程)

编写一个完整的“我的世界”游戏风格的程序在Python中是一个相当复杂的任务&#xff0c;因为它涉及到图形渲染、物理引擎、用户交互等多个方面。然而&#xff0c;我们可以创建一个简化的、基于文本的“我的世界”风格的探险游戏&#xff0c;来展示基本的游戏逻辑和交互。 第一步…

基于Spring Boot的高效宠物购物平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

STM32单片机 主、从、触发模式

主模式&#xff0c;将定时器内部信号映射到TRGO引脚&#xff0c;用于触发别的外设 在手册 控制寄存器2 一节可以知道各种主模式的解释从模式&#xff0c;接收其他外设或者自身外设的一些信号&#xff0c;用于控制自身定时器的运行&#xff0c;被别的信号控制触发源选择&#xf…

使用Logstash同步MySql数据到Elasticsearch

1、下载Logstash logstash下载地址 环境为 windows 2、将Logstash压缩包进行解压 将 mysql 驱动文件放在文件夹内 在Logstash根目录下创建 mysql-es.conf文件 input {jdbc {jdbc_driver_library > "E:\linshi\mysql-connector-java-8.0.11\mysql-connector-java-8.…

医院器械管理系统的设计与开发(全网独一无二,24年最新定做)

目录 文章目录: 前言&#xff1a; 系统功能&#xff1a; 1.用户 2.管理员 系统详细实现界面&#xff1a; 参考代码&#xff1a; 为什么选择我&#xff1a; 前言&#xff1a; 博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全…

数据库基础增删改练习

1.student学生表中&#xff0c;字段有姓名name&#xff0c;年龄age&#xff0c;要求查询姓张&#xff0c;并且年龄在18到25岁之间的学生 2.查询article文章表中&#xff0c;发表日期create_date在2019年1月1日上午10点30分至2019年11月10日下午4点2分的文章 3.查询article文章表…

Deepin-获取屏幕缩放比例

Deepin-获取屏幕缩放比例 一、概述二、实现代码 一、概述 环境&#xff1a;UOS、Deepin 我的目的是为了获取屏幕的缩放比例值&#xff0c;就是获取如下的值 我们可以去读取当前的环境变量值&#xff0c;在Qt Creator中可以看到这个值 二、实现代码 相关的Qt接口如下&…

基于vue框架的爱宁HPV疫苗管理系统4c7o1(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,审核员,城市,疫苗信息,接种预订,接种信息 开题报告内容 基于Vue框架的爱宁HPV疫苗管理系统 开题报告 一、项目背景与意义 随着全球对公共卫生健康的日益重视&#xff0c;HPV&#xff08;人乳头瘤病毒&#xff09;疫苗的接种已…

2024 Google 开发者大会深度探秘与AI技术前瞻

◆ 大会概览◆ 主旨与技术亮点◆互动体验区探秘◆智汇Google技术问答◆未来展望与建议 2024 Google 开发者大会于8月7日、8日在北京召开&#xff0c;很荣幸我作为嘉宾参加了这次大会&#xff0c;有机会与大家一同聚焦 Google 最新 AI 技术。在这篇文章中我们将一起亲眼见证 Goo…

Python3网络爬虫开发实战(11)JavaScript 逆向爬虫(上)

文章目录 一、网站加密和混淆技术简介1. URL/API 参数加密2. JavaScript 压缩3. JavaScript 混淆4. WebAssembly 二、浏览器调试常用技巧2.1 面板介绍2.2 节点事件2.3 断点调试2.4 观察调用栈2.5 Ajax 断点2.6 改写 JavaScript 文件 三、JavaScript Hook 的使用3.1 Hook 操作3.…

宝兰德持续赋能 助力金融数智化变革

金融机构作为助推数字经济发展的中坚力量&#xff0c;近些年在数字化转型叠加信创改造、AI大模型高速演进、监管环境变化等因素下&#xff0c;面临多重挑战&#xff0c;不得不重新审视传统IT架构&#xff0c;确保金融数据的安全性、可用性&#xff0c;从而激活自身动能&#xf…

计算机毕业设计 饮食营养管理信息系统 平衡膳食管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【嵌入式开发之网络编程】网络分层、OSI七层模型、TCP/IP及五层体系结构

计算机网络体系的形成 两台计算机要互相传送文件需解决很多问题&#xff0c;比如&#xff1a; 必须有一条传送数据的通路。发起方必须激活通路。要告诉网络如何识别接收方。发起方要清楚对方是否已开机&#xff0c;且与网络连接正常。发起方要清楚对方是否准备好接收和存储文…

JS UI库DHTMLX Suite v8.4全新发布——图表、网格组件等API全面升级

DHTMLX UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件&#xff0c;这些组件可以轻松组合到单个应用程序界面中。DHTMLX JS UI 组件可用于任何服务器端技术&#xff1a;PHP、Java、ASP.NET、Ruby、Grails、ColdFusion、Pyt…