ARM的异常处理

目录

异常的概念

ARM的异常源

异常优先级 

 异常模式

异常处理的过程

状态寄存器CPSR

异常向量表


异常的概念

异常是计算机系统中一种突发事件或错误情况,它打破了正常的程序执行流程,需要特殊处理。异常可能由硬件错误、软件错误或外部事件引发,例如访问无效的内存地址、除以零、非法指令、IO错误、中断等。

异常通常会导致程序执行的中断或终止,以防止继续执行可能会导致更严重错误的代码。当异常发生时,处理器会转移到一个预定义的异常处理程序或异常处理例程,其中包含了对异常进行处理的代码。

异常处理程序的主要目标是确保系统的稳定和可靠性。它可能包括一系列操作,如保存当前程序状态、获取有关异常的信息、恢复系统状态、记录异常日志、通知相关方等。处理程序还可以采取适当的措施来处理异常,如修复错误、重新启动系统、调用异常处理程序等。

异常是操作系统和编程语言中非常重要的概念,它们提供了一种机制来处理运行时错误和异常情况,以确保程序的正常执行和系统的稳定性。通过捕捉和处理异常,开发者可以编写更健壮、可靠的代码。

ARM的异常源

FIQ

快速中断请求 引脚有效

IRQ

外部中断请求 引脚有效

Reset

复位电平有效

Software Interrupt

执行swi指令

Data Abort

数据终止

Prefetch Abort

指令预取终止

Undefined Instruction

遇到不能处理的指令

异常优先级 

1、Reset(重置)

处理器上电或者复位时发生的异常

2、Data Abort(数据中止)

数据访问错误时发生的异常,一般是与Memory 误操作有关,如对不合法的内存地址、0地址写操作,或对一些Memory 越界操作。或者指令不支持

3、FIQ (快速中断)、IRQ (普通中断)

FIQ 具有更高的优先级,即当 FIQ 发生时,CPU 会在当前指令执行完成后立即响应 FIQ 中断,而忽略其他 IRQ 中断。这使得 FIQ 更适合处理紧急、实时性要求较高的中断。

4、Prefetch Abort(指令预取错误时发生的异常)

当CPU在执行指令时,发现指令缓存中没有下一条指令时,就会发生预取指中止异常。这种异常通常是由于程序中的错误或者硬件故障引起的。由于预取指中止异常的信息不够详细,因此很难定位和修复问题。

5、Software Interrupt(软件中断)

软件中断是一种由应用程序发起的中断,用于请求操作系统提供服务或执行某些操作。当应用程序需要访问受保护的资源或请求操作系统提供服务时,它会发出一个软件中断信号,这个信号会被CPU接收并暂时将控制切换到一个中断处理程序,内核中被中断挂起的进程将在中断被接受后恢复。软件中断可以被看作是同步事件,因为它是由应用程序主动发起的,而不是由外部设备触发的。

6、Undefined instruction(执行了未定义指令时发生的异常)

Undefined instruction异常是ARM处理器中的一种异常类型,当CPU遇到不认识的指令时,就会触发该异常。在异常处理函数中,可以对该异常进行处理,例如打印debug信息或者进行其他操作。

 异常模式

在ARM的基本工作模式中有5个属于异常模式,ARM遇到异常后会切换成对应的异常模式

异常处理的过程

1》保存执行状态

当前程序的执行状态是保存在CPSR里面的,异常发生时,要保存当前的CPSR里的执行状态到异常模式里的SPSR里,将来异常返回时,恢复回CPSR,恢复执行状态。

2》模式切换

硬件自动根据当前的异常类型,将异常码写入CPSR里的M[4:0]模式位,这样CPU就进入了对应异常模式下。不管是在ARM状态下还是在THUMB状态下发生异常,都会强制切换到ARM状态下进行异常的处理,这是由硬件自动完成的,将CPSR[5] 设置为 0。同时,CPU会关闭中断IRQ(设置CPSR 寄存器I位),防止中断进入,如果当前是快速中断FIQ异常,关闭快速中断(设置CPSR寄存器F位)。

3》保存返回地址

当前程序被异常打断,切换到异常处理程序里,异常处理完之后,返回当前被打断模式继续执行,因此必须要保存当前执行指令的下一条指令的地址到LR_excep(异常模式下LR,并不存在LR_excep寄存器,为方便读者理解加上_excep,以下道理相同),由于异常模式不同以及ARM内核采用流水线技术,异常处理程序里要根据异常模式计算返回地址。

4》跳入异常向量表

该操作是CPU硬件自动完成的,当异常发生时,CPU强制将PC的值修改为一个固定内存地址,这个固定地址叫做异常向量。

状态寄存器CPSR

异常向量表

整个异常处理过程是自动完成的,ARM内部会有对应硬件自动完成,即在设计ARM时就被固定了,所以每个异常处理会有固定的地址。异常向量表地址不能更改,后期一些新的处理器可以通过协处理器更改。
  1. 异常向量表的本质是内存中的一段代码
  2. 表中为每个异常源分配了四个字节的存储空间
  3. 遇到异常后处理器自动将PC修改为对应的地址
  4. 因为异常向量表空间有限一般我们不会再这里写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口

ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

8990890

作者主页:作者主页 数据结构专栏:数据结构 创作时间 :2024年5月18日

Mac OS 用户开启 8080 端口

开启端口 sudo vim /etc/pf.conf # 开放对应端口 pass out proto tcp from any to any port 8080 # 刷新配置文件 sudo pfctl -f /etc/pf.conf sudo pfctl -e获取本机ip地址 ifconfig en0 | grep inet | grep -v inet6 | awk {print $2}访问指定端口

JAVA环境的安装

一、JAVA环境的安装 像Java和一些其他的高级语言计算机直接识别不了,需要进行翻译,所以需要事先安装翻译工具 文件都在硬盘上,程序都在内存中 具体操作流程: 一、JDK的下载及安装 二、配置JAVA环境 1.打开环境变量 2.新建系…

Linux云计算架构师涨薪班就业服务有哪些?

学员一站式就业服务:一次学习,薪资翻倍 简历制作与指导 学员在培训期间,人才顾问会提供简历制作和指导服务,帮助学员制作出一份专业、有吸引力的简历。简历是求职者给招聘单位的第一印象,因此非常重要 模拟面试与技巧指导 为了让…

SpringBoot定时任务+Quartz 动态调度

1、分部解释 2、完整代码 3、SpringBoot定时任务Quartz 1、动态定时任务: 动态定时任务,即定时任务的动态调度,可根据需求自由的进行任务的生成、暂停、恢复、删除和更新操作。Quartz本身没有提供动态调度的功能,需要自己根据相关的API开发。…

Github 2024-06-06 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

小程序丨最大填表限制如何开启?

老师在新建填表时,希望设置最大数量限制,若填表达到限制,后续的学生将不能继续提交填表。 通过开启【表格最大限制】功能即可实现,下面就来教大家如何制作吧。 🔎如何开启表格最大限制功能? 按照常规流程…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战:探索 LLM 预训练的挑战 一、背景 在过往的文章中,我们详细阐述了LLM预训练的数据集、清洗流程、索引格式,以及微调、推理和RAG技术,并介绍了GPU及万卡集群的构建。然而,LLM预训练的具体细节尚待进一…

Web安全:Web体系架构存在的安全问题和解决方案

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等…

word2016版本中同时显示多个页面

为了方便查看word内容,我们会将多个页面同时显示。 对于2016版,操作方法如下: 视图 ---》多页

上海亚商投顾:沪指震荡下跌 两市成交不足7000亿元

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整,创业板指冲高回落。车路云概念股持续活跃,万通智控、鸿泉物联、华体…

AI炒股:获取个股的历史成交价格并画出K线图

任务:获取贵州茅台的近几个月的价格数据,绘制k线图; 在deepseek中输入提示词: 你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下: 用AKShare库获取股票贵州茅台&#xf…

超级详细Spring AI运用Ollama大模型

大模型工具Ollama 官网:https://ollama.com/ Ollama是一个用于部署和运行各种开源大模型的工具; 它能够帮助用户快速在本地运行各种大模型,极大地简化了大模型在本地运行的过程。用户通过执行几条命令就能在本地运行开源大模型,如Lama 2等; 综上&#x…

【毕业设计之微信小程序系列】基于微信小程序的餐厅点餐小程序的设计与实现

《基于微信小程序的餐厅点餐小程序的设计与实现》 项目效果图 目录大纲 摘要 1、选题及其意义 1.1、设计项目的名称 1.2、研究意义 2、需求分析 2.1、用户需求分析 2.2、功能需求分析 2.3、非功能需求分析 3、系统相关技术概述 3.1、餐饮平台开发相关技术 3.1.1、微信小程序 …

适用于 Windows 的 8 大数据恢复软件

数据恢复软件可帮助您恢复因意外删除或由于某些技术故障(如硬盘损坏等)而丢失的数据。这些工具可帮助您从硬盘驱动器 (HDD) 中高效地恢复丢失的数据,因为这些工具不支持从 SSD 恢复数据。重要的是要了解,您删除的数据不会被系统永…

NAT端口映射,实现外网访问内网服务器

目录 前言一、搭建网络拓扑1.1 配置server和pc1.1.1 配置server01.1.2 配置server11.1.3 配置pc0 1.2 配置客户路由器1.2.1 配置路由器IP1.2.2 配置静态路由 1.3 配置ISP路由器 二、配置端口映射2.1 在客户路由器配置端口映射2.2 测试公网计算机访问私网服务器2.2.1 PC0向serve…

一个简单的方式看看MySQL的锁

突然发现半个月没写了。最近事情太多了。 在日常工作的处理问题的过程中,我发现了一个简单的论证锁的问题,以前我讲的有点复杂,看来应该去改改之前的讲法了。 首先构造一个无主键无索引的表。并且初始化5条数据。 场景A: RR隔离…

珈和科技携手浙江省气候中心,打造农业气象数字化服务新标杆!

古谚有云:春耕夏种秋收冬藏,皆在天时。可天有不测风云,农有“旦夕祸福”。寒潮、干旱、洪涝等气象灾害频繁发生,给农业生产带来了巨大挑战。 气候变化直接影响着农业生产,数字化时代,如何依靠科技手段降低…