ARM 异常处理(21)

2024-09-03 08:36
文章标签 21 异常 处理 arm

本文主要是介绍ARM 异常处理(21),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

异常的流程:

首先: 在硬件上阶段: 这里是4大步3小步

然后是      异常处理: 这里主要是保存现场,进行异常处理

然后是      异常返回:  主要指 恢复现场, 再跳转回去。

首先硬件上:

4大步3小步。

第一大步: 当异常发生时,会将 CPSR的内容保存到目前模式的SPSR中,不知道需不需要手动执行。

第二大步: 第一小步,硬件会自动的设置 异常的类型,主要是设置 CPSR的 0-4 位,第二小步, 然后切换到arm 状态下,就是硬件自动设置 CPSR的 第5位 为0 , 第三小步,同时cpu 会自动的关闭CPSR的 中断, 也就是设置I位。

第三大步: 在进入异常处理之前,硬件会自动的将当前的PC的值减4 放到LR中。(它的作用是,将来会将LR的值,赋值到PC中,这里在赋值到PC中,LR的值, 会由于异常的类型的不同,计算的方法也不同)。

第四大步: 硬件会自动的跳到 中断向量表,中断向量表只是保存了一个 跳转的地址。cpu 根据异常的类型跳转到 固定的内存地址。

异常向量表如图

异常处理:

保存现场,进行处理。

在异常处理的最开始, 需要先要保存现场,

STMFD  SP_excep!,  {R0 – R12,  LR_excep}

这是将所有的寄存器全都保存到了栈中 。

包括 LR的值。

然后就开始进行 中断处理了。

注意: 这里的栈 , 是对应的异常模式的栈。

然后是异常的返回

首先是将 保存在栈中的 现场 全部恢复到 寄存器中

然后将SPSR 恢复到 CPSR中。

然后将 LR的值, 赋值到PC中,这里 有一个如何计算的问题。这里就是在 返回地址的修正。

对于 中断的话,是这样的。

SUBS    PC,LR_irq,#4  ; 一般中断
SUBS    PC,LR_fiq,#4  ; 快速中断

 这是因为,当中断处理时, PC的值已经更新了,所以PC指向的是, 当前指令,往下数3条指令,硬件会自动的 将PC-4的值,保存到LR中,我们之前已经将LR保存到栈中,现在又从栈中取出了LR的值, 现在还要再-4 才能赋值到PC中。

对于SWI 异常来说,当异常发生时,PC的值还未更新,它指向的是,当前指令的向下两条指令,由于硬件自动的将PC-4 保存到LR中了,所以这里就不用动了。指令如图:

MOV  PC,  LR_svc

其他的异常就可以先不看了。

在进行 寄存器恢复的时候,使用的命令。

LDMFD  SP_excp!,  {r0-r12,  pc}^

注:SP_excep为对应异常模式下SP,^符号表示恢复SPSR_excep到CPSR。

中断向量表 可以通过协处理器, 定位到 0xFFFF0000 处。

至于 中断做什么 可以由我们指定了。

这篇关于ARM 异常处理(21)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132529

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos