嵌入式知识点总结 ARM体系与架构 专题提升(三)-中断与异常

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。

目录

1.中断与异常有何区别?

2.中断与DMA有何区别?

3.中断能不能睡眠,为什么?下半部能不能睡眠?

4.中断的响应执行流程是什么?

5.当一个异常出现以后,ARM微处理器会执行哪几步操作?

6.写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?

7.为什么FIQ比IRQ要快?

8.中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?


1.中断与异常有何区别?

中断:由外部事件触发,如外设请求服务(例如串口接收数据、计时器溢出、键盘输入)。

异常:由内部事件触发,通常是处理器在执行指令时检测到的错误或特定条件(如除零错误、非法指令)。

中断是指外部硬件产生的一个电信号从CPU的中断引脚进入,打断CPU的运行。
异常是指软件运行过程中发生了一些必须作出处理的事件,CPU自动产生一个陷入来打断CPU的运行。异常在处理的时候必须考虑与处理器的时钟同步,实际上异常也称为同步中断,在处理器执行到因编译错误而导致的错误指令时,或者在执行期间出现特殊错误,必须靠内核处理的时候,处理器就会产生-个异常。

2.中断与DMA有何区别?

DMA:是一种无须CPU的参与,就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/0数据传输过程中摆脱出来,从而大大提高系统的吞吐率。
中断:是指CPU在执行程序的过程中,出现了某些突发事件时,CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回源程序被中断的位置并继续执行。
所以中断和DMA的区别就是:DMA不需CPU参与,而中断是需要CPU参与的

其实本质也不是一类东西。一个是执行的动作,一个是数据转运的方式。

3.中断能不能睡眠,为什么?下半部能不能睡眠?

1.中断处理的时候,不应该发生进程切换。因为在中断上下文中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断。如果在中断上下文中休眠,则没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断上下文中,没有进程的概念,没有一个task struct(这点对于softirq和tasklet一样)。因此真的休眠了,比如调用了会导致阻塞的例程内核几乎肯定会死。
2.schedule()在切换进程时,保存当前的进程上下文(CPU寄存器的值、进程的状态以及堆栈中的内容),以便以后恢复此进程运行。中断发生后,内核会先保存当前被中断的进程上下文(在调用中断处理程序后恢复)。
但在中断处理程序里,CPU寄存器的值肯定已经变化了(最重要的程序计数器PC、堆栈SP等)。如果此时因为睡眠或阻塞操作调用了schedule(),则保存的进程上下文就不是当前的进程上下文,所以,不可以在中浙处理程序中调用schedule()

3.2.4内核中schedule()函数本身在进来的时候判断是否处于中断上下文:
公众号:嵌入式与Linux那些事 CSDN:嵌入式与Linux那些事 来源网络,个人整理,转载声明
if(unlikely(in interrupt())
BUG();
因此,强行调用schedule()的结果就是内核BUG,但看2.6.18的内核schedule()的实现却没有这句,改掉了。
4.中断handler会使用被中断的进程内核堆栈,但不会对它有任何影响,因为handler使用完后会完全清除它使用的那部分堆栈,恢复被中断前的原貌。5.处于中断上下文时候,内核是不可抢占的。因此,如果休眠,则内核一定挂起。

特性中断上半部中断下半部
是否可以睡眠是(前提是能被调度)
执行上下文中断上下文进程上下文
调度能力不可调度可调度
典型场景硬件事件的快速响应延迟处理非实时任务

4.中断的响应执行流程是什么?

中断的响应流程:cpu接受中断->保存中断上下文跳转到中断处理历程->执行中断上半部->执行中断下半 部->恢复中断上下文。

5.当一个异常出现以后,ARM微处理器会执行哪几步操作?

1.将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,则LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SW!,指令MOV PC,R14 svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。
2.将CPSR复制到相应的SPSR中,
3.根据异常类型,强制设置CPSR的运行模式位。
4.强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

  • 异常触发
  • 保存CPSR到SPSR
  • 切换模式并屏蔽中断(可选)
  • 跳转到异常向量表地址
  • 执行异常处理程序
  • 恢复状态并返回

6.写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?

1.写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,包括硬件信息,然后退出中断,要做其它事情可以使用工作队列或者tasklet方式。也就是中断上半部和下半部。2.中断服务程序中不能有阻塞操作。应为中断期间是完全占用CPU的(即不存在内核调度),中断被阻塞住,其他进程将无法操作。
3.中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的。
4.如果要做的事情较多,应将这些任务放在后半段(tasklet,等待队列等)处理。

7.为什么FIQ比IRQ要快?

FIQ模式下,ARM处理器提供了一组专用的寄存器,可以避免上下文切换时保存和恢复通用寄存器的开销:

  • 专用寄存器:FIQ模式下的 R8 ~ R14 是专用寄存器,而 IRQ 和普通模式共享寄存器。
  • 优势:当进入FIQ中断时,R8~R14已经独立,不需要保存通用寄存器的上下文,直接可用,从而加快中断响应速度。
特性FIQIRQ
优先级更高(最高优先级)较低
寄存器使用使用专用的 R8~R14与用户模式共享寄存器
中断屏蔽自动屏蔽所有IRQ中断可能被FIQ中断抢占
适用场景紧急、实时、短时间任务处理通常的中断服务
响应速度较快较慢

8.中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?

中断是CPU处于被动状态下来接受设备的信号,而轮询是CPU主动去查询该设备是否有请求。
凡事都是两面性,所以,看效率不能简单的说那个效率高。如果是请求设备是一个频繁请求cpu的设备,或者有大量数据请求的网络设备,那么轮询的效率是比中断高。如果是一般设备,并且该设备请求cpu的频率比较低,则用中断效率要高一些。主要是看请求频率。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从替代到覆盖:暴雨信创服务器打开市场新局面

进入2025年,全球局势更加变幻莫测,高科技领域越来越受到全球局势影响。美国前任总统拜登在卸任前,特别颁布限制GPU产品出口法案。新任总统特朗普上任第一天,废除了多项之前法案,但显示技术交流的内容一条没变。 在如此艰难的局面下,我国信创市场的发展显得尤为重要,国家也从政策…

机器人抓取与操作经典规划算法(深蓝)——2

1 经典规划算法 位姿估计:(1)相机系位姿 (2)机器人系位姿 抓取位姿:(1)抓取位姿计算 (2)抓取评估和优化 路径规划:(1)笛卡…

C++二叉树进阶

1.二叉搜索树 1.1二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一颗空树,或者具有以下性质的二叉树 若它的左子树不为空,则左子树上所有结点的值小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值…

“AI视频智能分析系统:让每一帧视频都充满智慧

嘿,大家好!今天咱们来聊聊一个特别厉害的东西——AI视频智能分析系统。想象一下,如果你有一个超级聪明的“视频助手”,它不仅能自动识别视频中的各种元素,还能根据内容生成详细的分析报告,是不是感觉特别酷…

神经网络|(五)概率论基础知识-条件概率

【1】引言 前序完成了古典概型知识的简单学习,今天在此基础上开始条件概率的学习。古典概型的学习文章为:神经网络|(四)概率论基础知识-古典概型-CSDN博客 【2】条件概率 条件概率就是在A事件已经发生的条件下,B事件发生的概率。 设A、B是…

分布式版本控制系统:Git

1 Git概述 Git官网:https://git-scm.com/ Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目Git易于学习,占地面积小,性能极快。它具有廉价的本地库、方便的暂存区域和多个工作流分支等特性…

【leetcode】T1599

解题心得: 题目长且绕,直接看测试样例的解析有助于更快把握题目核心需求(即关注样例的输入、运算逻辑、输出) 题面 原题链接1599. 经营摩天轮的最大利润 - 力扣(LeetCode) AC代码 class Solution { pub…

能说说MyBatis的工作原理吗?

大家好,我是锋哥。今天分享关于【Redis为什么这么快?】面试题。希望对大家有帮助; 能说说MyBatis的工作原理吗? MyBatis 是一款流行的持久层框架,它通过简化数据库操作,帮助开发者更高效地与数据库进行交互。MyBatis…

Oracle Primavera P6 最新版 v24.12 更新 1/2

目录 引言 P6 PPM 更新内容 1. 在提交更新基线前预览调整 2. 快速轻松地取消链接活动 3. 选择是否从 XER 文件导入责任经理 4. 提高全局变更报告的清晰度 5. 将整个分层代码值路径导出到 CPP 6. 里程碑活动支持所有关系类型 6. 时间表批准 7. 性能改进 8. 安装改进 …

ORA-04031 错误

ORA-04031 错误表示 Oracle 数据库无法在共享池中分配所需的内存。共享池是 SGA(系统全局区)的一部分,用于缓存SQL语句、PL/SQL存储过程和控制结构等。此错误通常与数据库的内存管理有关,可能由于共享池大小不足或存在内存碎片导致…

SpringBoot 中的测试jar包knife4j(实现效果非常简单)

1、效果图 非常快的可以看见你实现的接口 路径http://localhost:8080/doc.html#/home 端口必须是自己的 2、实现效果 2.1、导入jar包 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-star…

2024年记 | 凛冬将至

放弃幻想&#xff0c;准备斗争&#xff01; 考研or就业&#xff1f; 上大学以来&#xff0c;考研上名校在我的心里一直是一颗种子&#xff0c;2024年初&#xff0c;当时的想法是考研和就业两手抓。买了张宇的高数现代&#xff0c;想要死磕&#xff01; 也记了挺多笔记... 如果…

【实践案例】使用Dify构建文章生成工作流【在线搜索+封面图片生成+内容标题生成】

文章目录 概述开始节点图片封面生成关键词实时搜索主题参考生成文章详情和生成文章标题测试完整工作流运行测试结果 概述 使用Dify构建文章生成工作流&#xff0c;使用工具包括&#xff1a;使用 Tavily 执行的搜索查询&#xff0c;使用Flux生成封面图片&#xff0c;使用Stable…

Linux线程安全

文章目录 &#x1f96d;Linux线程互斥进程线程间的互斥相关背景概念互斥锁mutex互斥锁的接口互斥锁实现原理探究 &#x1f34d;可重入VS线程安全概念常见的线程不安全的情况常见的线程安全的情况常见的不可重入的情况常见的可重入的情况可重入与线程安全联系可重入与线程安全区…

csapp2.4节——浮点数

目录 二进制小数 十进制小数转二进制小数 IEEE浮点表示 规格化表示 非规格化表示 特殊值 舍入 浮点运算 二进制小数 类比十进制中的小数&#xff0c;可定义出二进制小数 例如1010.0101 小数点后的权重从-1开始递减。 十进制小数转二进制小数 整数部分使用辗转相除…

在php中怎么打开OpenSSL

&#xff08;点击即可进入聊天助手&#xff09; 背景 在使用php做一些项目时,有用到用户邮箱注册等,需要开启openssl的能力 在php系统中openssl默认是关闭状态的,在一些低版本php系统中,有的甚至需要在服务器终端后台,手动安装 要打开OpenSSL扩展&#xff0c;需要进行以下步骤 …

Rust语言进阶之zip用法实例(九十五)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

[权限提升] Windows 提权 — 系统内核溢出漏洞提权

关注这个框架的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;系统内核溢出漏洞提权介绍 注意&#xff1a;提权很容易让电脑蓝屏&#xff0c;所以如果是测试的话&#xff0c;提权前最好做好系统备份。 溢出漏洞就像是往杯子里装水 —— 如…

Windows11 安装poetry

使用powershell安装 (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py - 如果使用py运行失败则替换为python即可 终端运行结果如下 D:\AI\A_Share_investment_Agent> (Invoke-WebRequest -Uri https://install.python-poetry.…

系统思考—心智模式

“我们的大脑对连贯性的渴望远胜于对准确性的追求。”—诺贝尔经济学得主丹尼尔卡尼曼 在面对复杂的决策时&#xff0c;我们往往更倾向于寻找那些能够迅速串联起来的信息&#xff0c;而非深入挖掘每一个细节的真实性。这种倾向在日常生活中或许能帮助我们迅速作出决策&#xf…