中断处理流程以及程序状态寄存器CPSR的本质

news2024/11/24 3:11:31

文章目录

  • 前言
  • 一、当前程序状态寄存器(CPSR)
  • 二、异常的分类
    • 2.1 7个异常源
    • 2.2 异常的优先级
    • 2.3 为什么FIQ比IRQ快?
    • 2.4 异常与工作模式的区别
  • 三、异常的处理流程
    • 3.1 异常处理机制
    • 3.2 进入异常处理流程:
    • 3.3 退出异常的处理流程:
  • 总结


前言

在前面已经介绍了通用寄存器r0-r14,其中包括r13(SP)堆栈指针寄存器(比如c语言的执行,子函数的调用都会用到堆栈指针),r14(LR)程序链接寄存器保存子程序的返回地址以及保存异常发生时PC-4(当前执行的指令地址,执行完异常处理后继续回来处理)的值;实现异常等操作后程序的返回;PC(R15)是程序计数器,用来存放即将要执行程序的地址;功能寄存器有CPSR和SPSR,CPSR是当前程序状态寄存器,SPSR是保存程序状态寄存器,所以spsr能够保存cpsr中的值;有了这些概念以后,接下来看一下异常发生是CPU具体的操作步骤和操作流程究竟是怎样的?


一、当前程序状态寄存器(CPSR)

在本期分享之前,先来带大家看一个比较厉害的功能寄存器----CPSR(当前程序状态寄存器);
它的作用主要有以下几个:
(1)保存最近已处理的 ALU (算数逻辑单元)操作的信息;
(2)控制中断的使能与禁止;
(3)设置处理器的运行模式;
下面从寄存器内部结构上来看一下:
在这里插入图片描述

31位  N位  符号标志位   1运算结果负数  0运算结果正数
30位  Z位  结果0标志位  1运算结果为0 	 0运算结果非0
29位  C位  进位标志     
		 	  加法 1存在进位  	0不存在进位
			  减法 1不存在借位 	0存在借位
28位  V位  溢出表示  	1存在溢出  0不存在溢出
7位   I位  irq控制     	1禁止irq 0使能irq
6位   F位  fiq控制     	1禁止irq 0使能irq
5位   T位              	1 thumb状态  0arm状态
4-0位 模式控制

二、异常的分类

2.1 7个异常源

异常主要有以下几个:

(1)复位异常     		0x0				reset
(2)未定义异常  		0x4				undef
(3)软件中断     		0x8				swi
(4)预取中止     		0xc				pre_abort
(5)数据中止  		    0x10			data_abort
(6)irq         	    0x18			中断请求
(7)fiq          		0x1c			快速中断请求

2.2 异常的优先级

在这里插入图片描述
这里按照优先级介绍各个异常:
高优先级:
(1)复位指的时比如按下复位按键,那么CPU会从头开始执行程序;
(2)数据中止:由存储器发生的异常;
(3)快中断FIQ
(4)中断IRQ
(5) 预取中止:取指令时发现未定义或者不可识别的指令;
低优先级:
(6)未定义:未定义变量;
(7)软件中断:比如SWI软件中断;

2.3 为什么FIQ比IRQ快?

ARM的FIQ模式提供了更多的banked备份寄存器,r8 ~r14,SPSR;而IRQ模式提供的banked寄存器为R13,R14,SPSR;
这就意味着在ARM的IRQ模式下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些值到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快.

2.4 异常与工作模式的区别

这里需要说明的是ARM的工作模式和异常中有几个名字一样,但是它们的本质是不一样的,一种是工作模式,另一种是异常源;
这里给出图片供大家区分:
在这里插入图片描述
相应的异常源产生时会使得CPU进入不同的处理模式;

三、异常的处理流程

3.1 异常处理机制

异常发生时,cpu区分异常,自动跳转到异常向量表基地址固 定偏移量处执行代码
处理的具体流程如下:

3.2 进入异常处理流程:

(1)将当前指令的下一条指令的地址(PC+4)存入LR,以便于后续CPU处理完异常后跳回当前继续执行程序;
(2)SPSR = CPSR(保存当前程序的状态,恢复的时候也是恢复到原来程序的状态);(保护现场)
(3)修改CPSR模式位;
(4)PC赋值为异常向量表的偏移量;(使得主程序能够跳转到异常处处理异常);

3.3 退出异常的处理流程:

(1)将LR中存储的地址-4放入PC中;(-4的原因是因为要恢复到异常发生前,也就是进入异常前的指令地址处);
(2)CPSR = SPSR;(恢复现场);
(3)清除中断标志位;


总结

本期主要分享的时ARM920T的7种工作模式以及其7种异常源,并且对CPU处理异常的机制进行了详细的流程分析,这是非常重要的一部分,也是后续在学习裸机开发中中断部分的基础,想要学好嵌入式,中断是CPU非常重要的处理任务的一种方法,它能够极大的提高CPU的工作效率,从而使得整个系统更加流畅的进行工作;小伙伴们加油,理解起来哦!
最后,各位小伙伴们如果喜欢我的分享可以点赞收藏哦,你们的认可是我创作的动力,一起加油!

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

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

相关文章

送给蓝初小萌新系列(1)——Linux入侵排查

一、linux系统资源 1、linux被入侵的症状 linux系统资源用户和日志文件和命令篡改启动项和定时任务挖矿脚本分析 2、linux系统资源 2.1、CPU内存磁盘 top -c -o %CPU:查看cpu占用情况(按cpu排序) top -c -o %MEM:查看内存占用情况(按内存…

兼容性测试如何提高网站的可用性?

兼容性测试如何提高网站的可用性? 在现代社会,网站已经成为了人们获取信息、进行交流的主要渠道之一。但是,在网站的设计和开发中,往往会存在兼容性问题,导致不同浏览器或设备的用户无法顺利地访问和使用网站,降低了网…

华为OD机试之最长连续子序列(Java源码)

最长连续子序列 题目描述 有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度, 如果没有满足要求的序列,返回-1。 输入描述 第一行输入是:N个正整数…

【Spring 核心 | IoC】

IoC IoC 简介定义:IoC 和 DIBeanIoC 容器Ioc IoC容器 IoC 简介 定义: IoC即控制反转(Inversion of Control,缩写为 IoC)。IoC又称为依赖倒置原则(设计模式六大原则之一)。 IoC意味着将你设计好…

走近mysql运算符|靠它就够啦

这里写目录标题 比较运算符的使用等号运算符<>安全等于不等于运算符<>/!非符号类型的运算符BETWEEN ANDINLIKEPEGEXP/ RLIKE 逻辑运算符使用位运算符 比较运算符的使用 等号运算符 判断等号两边的值&#xff0c;字符串或表达式是否相等&#xff0c;如果相等则返回…

Hadoop/Hive/Spark小文件处理

什么是小文件&#xff1f; 小文件指的是文件size比HDFS的block size小很多的文件。Hadoop适合处理少量的大文件&#xff0c;而不是大量的小文件。 hadoop小文件常规的处理方式 1、小文件导致的问题 首先&#xff0c;在HDFS中&#xff0c;任何block&#xff0c;文件或者目录…

吴恩达471机器学习入门课程1第1周——梯度下降

文章目录 1加载数据集2计算COST(均值平方差&#xff0c;1/2m(y_pre - y))3计算梯度4画出成本曲线5梯度下降 import math, copy import numpy as np import matplotlib.pyplot as plt plt.style.use(./deeplearning.mplstyle) from lab_utils_uni import plt_house_x, plt_conto…

华为OD机试真题 JavaScript 实现【找出通过车辆最多颜色】【2023Q1 100分】

一、题目描述 在一个狭小的路口&#xff0c;每秒只能通过一辆车&#xff0c;假如车辆的颜色只有3种&#xff0c;找出n秒内经过的最多颜色的车辆数量。 三种颜色编号为0、1、2。 二、输入描述 第一行输入的是通过的车辆颜色信息 [0 1 1 2] 代表4秒钟通过的车辆颜色分别是0 1…

手把手教你使用CONN(预处理)

CONN软件介绍 &#xff08;1&#xff09;CONN是一个基于Matlab的跨平台软件&#xff0c;用于计算、显示和分析功能磁共振成像&#xff08;fcMRI&#xff09;中的功能连通性。也可用于静息状态数据&#xff08;rsfMRI&#xff09;以及任务相关设计。 &#xff08;2&#xff09…

Vue的组合式

1. 概念 选项式API&#xff1a;将相同类型的代码放在一起&#xff08;比如所有数据、所有用到的方法等等&#xff09;当代码业务板块过多时&#xff0c;不方便写代码和后期维护 组合式API&#xff1a;将同一业务的相关代码放在一起&#xff08;比如说数据&#xff0c;方法&am…

什么是同源策略

文章目录 同源策略同源策略的目的同源策略分类 同源策略 同源策略是指浏览器的一种安全机制&#xff0c;用于限制来自不同源&#xff08;即域、协议或端口&#xff09;的文档或脚本之间的交互操作。 根据同源策略&#xff0c;浏览器只允许当前网页与同一源下的其他资源进行交…

Linux之CentOS 7.9部署Oracle 11g r2 静默安装实测验证(无桌面模式)

前言&#xff1a;因前段时间一直部署的windows环境的oracle&#xff0c;这次记录下linux下的部署方式&#xff0c;当然还有更多的其他部署&#xff0c;大家可根据自身环境及学习来了解。一般静默安装主要还是要提前准备源包&#xff0c;还有很多依赖包&#xff0c;另外就是配置…

如何显示文件后缀名,这4个方法很简单!

Anna最近想对电脑里的文件进行分类&#xff0c;但有些未知类型的文件&#xff0c;她想查看文件的类型并进行分类&#xff0c;可是她不知道如何显示文件后缀名&#xff0c;因此向大家求助。 在计算机操作中&#xff0c;文件的后缀名是文件名的一部分&#xff0c;用于标识文件的类…

FlinkSQL写入iceberg—Windows环境下

前置条件 Flink运行版本13.1&#xff0c;iceberg依赖版本&#xff1a;1.0.0 依赖 FlinkSQL运行环境略。 注意版本匹配&#xff0c;采用不合适版本可能导致无法读写。 <!-- Flink 操作Iceberg 需要的Iceberg依赖 --><dependency><groupId>org.apache.iceb…

shell脚本变量-特殊变量

目录 特殊变量&#xff1a;$n案例需求 特殊变量&#xff1a;$#案例需求 特殊变量&#xff1a;$*、$案例需求 特殊变量&#xff1a;$&#xff1f;特殊变量&#xff1a;$$ 特殊变量&#xff1a;$n 语法 $n含义&#xff1a; 用于接收脚本文件执行时传入的参数 $0 用于获取当前脚…

机器人系统中的六大漏洞

原创 | 文 BFT机器人 在过去的几十年里&#xff0c;创新和技术导致机器人技术不断发展。 机器人系统正在迅速变得更加多产、复杂、有能力、智能化和网络化&#xff0c;并被用于越来越多的任务。 最初&#xff0c;机器人技术领域仅限于制造领域&#xff0c;但现在机器人可以与人…

KMP算法 - 确定有限状态自动机

KMP神在哪里&#xff1f; 子串匹配问题&#xff0c;拍脑袋一下子想出来的暴力解法大抵都是两重for循环&#xff0c;不断重复扫描主串&#xff0c;与子窜进行匹配&#xff0c;重复换句话讲就是冗余&#xff0c;会有很高的时间复杂度 我先前博客大作业发的模糊查找算法就是如此&…

三分钟告诉你如何和智能ai聊天

有一个名叫艾丽的年轻女孩&#xff0c;她生活在一个科技发达的未来世界。在这个世界里&#xff0c;人们与人工智能伙伴共同生活。艾丽对ai技术充满好奇&#xff0c;尤其是对ai对话聊天工具的运作方式。为了知道ai对话聊天工具怎么用&#xff0c;艾丽决定展开探索。 方案一&…

智能无线监测器的工作原理及应用优势

在现代工业生产中&#xff0c;设备状态监测对于确保生产的安全性、效率和可靠性至关重要。随着科技的不断发展&#xff0c;智能无线监测器成为工业设备状态监测的利器。本文将介绍智能无线监测器在工业领域中的应用&#xff0c;以及其带来的优势和价值。 图.设备状态监测&#…

智驾风向标|卷、乱、难,如何穿越多极分化新周期?

竞争越来越卷&#xff0c;企业越来越难&#xff0c;市场处于混乱期。对于大多数供应商来讲&#xff0c;穿越新周期的战略一定是先有规模&#xff08;市场份额&#xff09;&#xff0c;然后才是利润。 在6月8日召开的2023&#xff08;第十四届&#xff09;高工智能汽车开发者大…