arm架构 --- 中断

news2024/9/24 21:20:49

ARM的异常

终止程序的正常执行过程而不得不去完成的一些特殊工作
在这里插入图片描述
中断是异常的一种,包括外部硬件产生的异常和芯片内部硬件产生的内部中断。

ARM有七种处理器模式,其中用户模式和系统模式之外的5钟处理器模式叫做异常模式,用户模式之外的6钟处理器模式称为特权模式
设计这么多种模式,是为了更好地处理异常。
在这里插入图片描述

回顾一下ARM寄存器组:
R13用来保存堆栈指针
R14用来保存上一段程序的返回地址
R15用来保存当前模式的PC指针
在这里插入图片描述
CPSR = Current Process State Register
SPSR = Save Process State Register

当从一个特权模式切换到另一个特权模式时:

要将当前模式程序执行PC(R15)- 4 保存到目标模式的R14(LR)中
如果要使用目标模式下的共有寄存器(如R0 ~ R12),则必须要把这些寄存器保存到堆栈中(R13)
为了防止模式切换回来后CPSR被破坏(看图中,CPSR也是公共的),需要将CPSR提前保存到SPSR中
将CPSR切换到相应模式:
将PC值设为目标程序入口地址
(总结来说:两大步:1. 切模式 2. 送地址给PC 其他操作都是为了保存现场而做)
在这里插入图片描述
前面为什么要把PC - 4 送到LR寄存器?
因为ARM9三级流水线,且PC总是指向待取指的那条指令,同一时刻:
待取值的指令在PC位置
正在译码的指令在PC-4位置
正在执行的指令在PC-8位置
在这里插入图片描述

模式切换时运行的指令一定是执行的指令,那么这个指令下一条指令就是模式切换回来要继续执行的指令,需要保存到目标模式的LR寄存器中,也就是说PC-4送入目标模式的LR。模式切换回来时LR–> PC,就成功跳转到中断时指令的下一条指令了。


提高中断效率

在中断发生时,CPU 进入中断模式,进入中断服务函数。此时CPSR的I位和F位默认被设置为1,也就是说中断是被禁止的。此时若有另一个中断到来,CPU是无法立马响应的,这就影响了中断的效率,属于中断延迟。
要解决中断延迟,一个好的办法是实现中断嵌套,在中断处理时,允许第二中断的产生和对其的响应。但是:

在中断模式下,R14_irq保存的是被中断进程的返回地址,将它保存到堆栈中去,目的是中断模式有函数调用时,R14寄存器可以用于保存函数返回值。如果此时另一个中断恰好发生,R14_irq又要再一次地进行之前的操作:保存中断进程的返回时的地址,此时原来的返回值便弄丢了,此时可以顺利从二级中断返回一级中断将一级中断的服务函数剩余的代码都执行完,但是无法跳转到最开始被中断的进程了。
SPSR寄存器也是一样的窘境,中断模式下SPSR_irq保存了上一个模式的CPSR,如果再来一个中断,SPSR_irq又要保存新中断的CPSR,原来被中断进程的CPSR也弄丢了。

当然,难解决并不代表不能解决,只不过我们需要换个思路,不在中断模式下,而是切换到其他模式进行中断处理。当中断处理程序发生在其他模式(如SVC模式)时,函数调用的返回值会保存在寄存器R14_svc中,即使此时中断再次发生,CPU也会自动进入中断模式,将被中断的程序的返回值保存在R14_irq中,二者不再冲突。这就是实现中断嵌套的普遍方法。

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

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

相关文章

osgEarth示例分析——osgearth_terrainprofile

前言 osgearth_terrainprofile示例,涉及到一个新的类 TerrainProfileCalculator(地形轮廓计算器类),用来计算两个点连线之间的地形数据。左下角会根据点击的起点和终点进行计算,并更新显示地形信息。 效果 拖动地球,到某一个视…

[附源码]Python计算机毕业设计SSM基于的智慧校园安防综合管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

软件安全测试-Web安全测试详解-XSS攻击

目录 1. XSS攻击 1.1 XSS攻击原理 1.2 XSS能做什么 1.3 XSS三种类型 1.4 XSS三种途径 1.5 XSS测试方法 1.5.1 查看代码 1.5.2 准备测试脚本 1.5.3 自动化测试XSS漏洞 1.5.4 XSS注入常用语句 1.6 XSS漏洞防范h3 1.6.1 对输入和URL参数进行过滤(白名单和黑名单) 1.6.…

tensorflow入门(一) 计算图、张量、会话的概念

1、计算图 计算图是tensorflow中最基本的一个概念,tensorflow中的所有计算都被转化成计算图上的节点。tensorflow的名字已经说明了它最重要的两个概念------tensor和flow。张量这个概念在数学或者物理学中可以有不同的解释,在tensorflow中,张…

基于tensorflow的深层神经网络(三)如何用tensorflow优化神经网络

1、神经网络优化算法 梯度下降算法主要用户优化单个参数的取值,而反向传播算法给出了一个高效的方式在所有参数上使用梯度下降算法,从而使神经网络模型在训练数据上的损失函数尽可能小。反向传播算法是训练神经网络的核心算法,它可以根据定义…

红黑树的插入过程

一棵红黑树是一种特殊的二叉查找树,具有以下性质: 每个节点要么是红色,要么是黑色。根节点是黑色。每个叶子节点(NIL)是黑色。如果一个节点是红色的,那么它的两个儿子都是黑色的。从任意一个节点到其每个叶…

71.qt quick-可伸展菜单-抽屉栏示例 通用QML界面(一键换肤)

在我们之前章节已经提供过了抽屉栏和菜单伸展栏: 63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-CSDN博客_qml侧边栏68.qt quick-qml多级折叠下拉导航菜单 支持动态添加/卸载 支持qml/widget加载等_诺谦的博客-CSDN博客_qml下拉菜单 由…

三维家发生工商变更:注册资本减少46%,美凯龙、阿里等股东退出

近日,云工业软件服务商广东三维家信息科技有限公司(下称“三维家”)发生工商变更,注册资本由16.9254亿元变更为9亿元,同比减少46.83%。同时,包括红星美凯龙、阿里巴巴等多名股东退出,变更时间为…

01.Spring源码整体脉络介绍及源码编译——四

IOC是核心 IOC 容器加载过程【重要】:所有模块都依赖IOC,aop,循环依赖都依赖IOC IOC控制反转,控制理念,来解决层与层之间的耦合。DI注入实现 怎么讲Bean交给IOC容器来管理 配置类xml,注解 加载spring上下…

java计算机毕业设计ssm学院校友信息管理系统的设计与实现5yqhy(附源码、数据库)

java计算机毕业设计ssm学院校友信息管理系统的设计与实现5yqhy(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts…

【Java基础篇】基础知识易错集锦(二)

我们同样用几道例题来回顾相对应的基础知识; 解析: 首先我呢区分一下实例变量和局部变量; 局部变量:定义在方法内部的变量;实例变量:定义在类中但在任何方法之外,你也可以理解为全局变量&…

16.C预处理器和C库

文章目录C预处理器和C库16.1翻译程序的第一步16.2明示常量:#define16.3在#define中使用参数16.3.1用宏参数创建字符串:#运算符16.3.2预处理器黏合剂:##运算符16.3.3变参宏:...和__VA_ARGS__16.4宏和函数的选择16.5文件包含&#x…

NCTF2022 calc题目复现

calc(环境变量注入getshell) 经典计算器题目,看着有点眼熟,没错,就是buu三月赛的一道题目。由于那时候web可能都算不上入门,所以也就没有复现。比赛时就网上看了看三月赛的wp,但是没有什么用&a…

IEEE 二进制浮点数的表示

今天,我来将 IEEE 二进制浮点数的表示方式进行一个简单的介绍。 浮点数 在 C 语言中,有两种存储浮点数的方式,分别是 float 和 double ,当然了还有long double。这几种浮点型所容纳的长度不同,当然它们存储的精度也就…

[附源码]JAVA毕业设计新型药物临床信息管理系统(系统+LW)

[附源码]JAVA毕业设计新型药物临床信息管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 …

p5.第一章 Python基础入门 -- 运算符、优先级和表达式 (五)

1.2.3.2.11 False等价 False等价布尔值,相当于bool(value) 空容器 空集合set空字典dict空列表list空元组tuple空字符串None0# bool(value)是布尔函数# In: bool(1), bool(0) # Out: (True

离散数学·支配集、覆盖集、独立集和匹配

支配集 简而言之——V-支配集后剩下的点,都能在支配集中找到相邻的点 支配数的符号是γ0(有关点的集,下标为0) 例 右下角相同颜色的为同一个支配集 要注意极小性 整个V就是支配集(所以说支配集找极大没有意义&#xf…

测试员凡尔赛,工作三年晒出11月工资条,直言加班太累了

最近有工作3年的测试员晒出自己11 月份的工资条,并直言加班太累了。 从工资条上可以看到,这个收入确实不算低,才3年时间,月工资就已经到了二万五了,这个工资已经可以击败绝大多数行业了。 不过二万五只是税前工资&am…

第二证券|系统性稳地产政策加力 租购并举制度加快建立

在房地产职业深度调整期,下一年方针走向备受关注。虽然日前召开的中心政治局会议没提及房地产,可是从其对经济方针的表述能够预见,作为经济支柱产业的房地产职业,下一年将在稳经济中发挥更重要的效果,国家将持续出台系…

[附源码]Python计算机毕业设计SSM基于的装修公司运营管理管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…