[IMX6ULL驱动开发]-Linux对中断的处理(一)

news2024/12/26 11:22:23

目录

中断概念的引入

ARM架构中断的流程

异常向量表

Linux系统对中断的处理

ARM对程序和中断的处理

Linux进程中断处理


中断概念的引入

如何理解中断,我们可以进行如下抽象。把CPU看做一个母亲,当它正在执行任务的时候,可以看为是一个母亲在看书。此时可能发生许多不同的情况,比如说:远处传来猫叫声、快递敲门、房间中小孩子传来哭声,如上三种,其实都可以看做CPU的中断,可以根据重要性来进行判断是否要放下手头中正在看的书(CPU暂时暂停处理任务去执行中断)进行处理

此时,还有可能发生如下情况,比如说地震了、突然掉下来一只蜘蛛、水突然烧开了,此时肯定是要停止看书去处理这些突发事件的(发生异常的时候,CPU必须马上处理)

如果这个母亲决定去处理听到的事,那么首先她需要先使用书签夹在书上,记录下当前看到的位置(保存现场),然后再去处理问题(处理异常),回来后,通过书签找到之前阅读的位置(恢复现场)。


ARM架构中断的流程

ARM架构中断的流程如下:

1、初始化

        首先设置中断源让它们可以产生中断(只有外界可以产生声音,比如猫叫、小孩子哭等,才可以产生中断),比如让一个GPIO引脚可以产生中断。然后设置中断控制器,设置中断的优先级、或者屏蔽某些中断,比如耳朵听见了,但是不想去处理,可以假装没有听见,这样就是屏蔽了某个中断。最后需要开启CPU的中断总开关(如果母亲是聋子的话,对于外界所有声音都是无效的)

2、CPU执行任务

3、产生中断

        按下按键,中断信号发给中断控制器,中断控制器再发给CPU。

4、CPU每执行一条指令都会检查是否有异常/中断产生(硬件决定)

5、发生异常/中断,开始处理

        对于不同异常,跳到不同地址执行处理(异常向量表),这些地址上是函数指针或者函数地址,用来处理不同的异常

6、保存现场、执行处理函数、恢复现场


异常向量表

当发生异常的时候,CPU会根据不同的异常来执行不同的处理。

从异常向量表跳转过去处理异常的时候,首先会保护现场、处理异常最后恢复现场


Linux系统对中断的处理

ARM对程序和中断的处理

如何理解栈在进程、线程、中断中的作用,我们需要先了解ARM是怎么处理程序的,ARM芯片属于精简指令集计算机,它对于内存是只有读、写操作的。

比如说我们要进行a=a+b的运算,那么我们需要先读取a到CPU中,然后在读取b到CPU中,在CPU中执行a+b,然后在写入到a当中。

如果在看的更加细节,那么我们可以通过下图来进行解释。CPU首先会先取代码,才能知道我们一步步要进行什么操作(这里代码需要转化为机器码),我们首先把a的值取到R0寄存器中,然后把b的值取到R1寄存器中,让R1、R0寄存器相加存放到R0寄存器,然后再把R0寄存器的值读取到a中。

假如,此时发生了中断,那么CPU是怎么进行处理的呢?

Linux进程中断处理

当进程A执行到一半的时候发生了中断,此时需要保存现场,然后执行中断,再恢复现场。当进程A继续执行,此时再次发生了中断,继续保存现场,执行中断,恢复现场。定时器发现进程A的时间用完之后,会保存A的现场,然后恢复B的现场。(对于这个定时器个人理解为,单核CPU并发执行进程,每个进程执行一段时间切换,宏观上看成并行)

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

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

相关文章

Modbus-RTU/TCP规约 | 报文解析 | 组织报文与解析报文(C++)

文章目录 一、MODBUS规约1.MODBUS-RTU规约2.MODBUS-TCP规约 二、报文解析1.MODBUS-RTU报文帧解析2.MODBUS-TCP报文帧解析 三、C代码实现组织报文与解析报文 一、MODBUS规约 Modbus规约是一种广泛使用的串行通信协议(应用层报文传输协议),用于…

C++质数的那些事(判断指数、区间筛质数、互质等等)

质数的定义:若一个正整数除了1和它自身之外不能被任何自然数整除,则该数称为质数,也叫素数。否则为合数。 质数的性质:质数的分布较为稀疏,对于一个足够大的数S,不超过S的质数大约有个,也就是说…

视频安防监控EasyCVR视频汇聚管理平台视频播放花屏的原因分析及处理

智慧安防监控EasyCVR视频管理平台能在复杂的网络环境中,将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

基于SpringBoot和Hutool工具包实现的验证码案例

目录 验证码案例 1. 需求 2. 准备工作 3. 约定前后端交互接口 需求分析 接口定义 4. Hutool 工具介绍 5. 实现验证码 后端代码 前端代码 6. 运行测试 验证码案例 随着安全性的要求越来越高,目前项目中很多都会使用验证码,只要涉及到登录&…

【C语言】VS编译器的scanf

我们在写代码的时候通常需要用到输入函数:scanf,但在vs编译环境下却必须写为:scanf_s,这是为什么呢?这里就是vs规定的了,VS认为这样写更安全,但如果我们非要写成scanf形式也是有办法的。 # 看我…

hls.js实现分片播放视频

前言&#xff1a;hls.js官网&#xff1a;hls.js - npm 一、demo——在HTML中使用 <audio id"audio" controls></audio><script src"https://cdn.jsdelivr.net/npm/hls.jslatest"></script> <script>document.addEventList…

OTP8脚-全自动擦鞋机WTN6020-低成本语音方案

一&#xff0c;产品开发背景 首先&#xff0c;随着人们生活质量的提升&#xff0c;对鞋子的保养需求也日益增加。鞋子作为人们日常穿着的重要组成部分&#xff0c;其清洁度和外观状态直接影响到个人形象和舒适度。因此&#xff0c;一种能够自动清洁和擦亮鞋子的设备应运而生&am…

oracle中insert all的用法

1、简述 使用insert into语句进行表数据行的插入&#xff0c;但是oracle中有一个更好的实现方式&#xff1a;使用insert all语句。 insert all语句是oracle中用于批量写数据的 。insert all分又为 无判断条件插入有判断条件插入有判断条件插入分为 Insert all when... 子句 …

VMware 和 VirtualBox开机自启指定虚拟机详细教程

VMware上虚拟机随宿主机开机自启 1. 设置自动启动虚拟机 网上教程旧版的&#xff0c;界面和新版有所差异。17版本设置如下&#xff1a;VMware Workstation工作台 -> 文件 -> 配置自动启动虚拟机 -> 按顺序选择需要启动的虚拟机 VMWare17配置自动启动虚拟机提示&…

使用WindTerm通过公钥让其他同事登录linux服务器

1.其他同事电脑操作cmd输入 ssh-keygen,如果是第一次生成公钥&#xff0c;则直接一路回车确认就行 会生成在C:\Users\nideNAME\.ssh目录 公钥文件名为id_rsa.pub&#xff0c;私钥文件名为id_rsa。 2.你的电脑你已经连接上服务器了 在root下新建目录 root/.ssh/新建文件touck …

数据库小项目——叮叮移动业务大厅(三层架构+MySQL数据库)

源码已上传至资源 该项目主要使用技术为MySQL数据库&#xff0c;其中也包含了一些对于文件的写入和读取操作。项目结构采用三层架构&#xff0c;后端的业务逻辑清晰明了。 1.项目结构 项目采用控制台版&#xff0c;前端业务在java包下&#xff0c;每个业务单独成块。若想要GUI…

GD32F307+lwip+freeRTOS+DP83848 JPerf接收测速

1.原理图 2.代码 https://www.firebbs.cn/forum.php?modviewthread&tid26274&fromuid37393 //22_ENET 1&#xff09;注释掉tcp_client_init(); 2&#xff09;init_task中添加测速线程iperf_server_init() //main.c #include "gd32f30x.h" #include &quo…

自定义RedisTemplate序列化器

大纲 RedisSerializerFastJsonRedisSerializer自定义二进制序列化器总结代码 在《RedisTemplate保存二进制数据的方法》一文中&#xff0c;我们将Java对象通过《使用java.io库序列化Java对象》中介绍的方法转换为二进制数组&#xff0c;然后保存到Redis中。实际可以通过定制Red…

QTextCodec NO such file or directory让qt6兼容qt5

首先在.pro 文件中新加 QT core5compat这时会报错 链接 报错之后修复qt&#xff0c;新加兼容模块&#xff0c;见链接。

C++实现基于http协议的epoll非阻塞模型的web服务器框架(支持访问服务器目录下文件的解析)

使用方法&#xff1a; 编译 例子&#xff1a;./httpserver 9999 ../ htmltest/ 可执行文件 端口 要访问的目录下的 例子&#xff1a;http://192.168.88.130:9999/luffy.html 前提概要 http协议 &#xff1a;应用层协议&#xff0c;用于网络通信&#xff0c;封装要传输的数据&…

LeetCode 79.单词搜索

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内…

本地centos7+docker+ollama+gpu部署

1、一台有 NVIDIA GPU 驱动的机器 2、Docker CE安装 # 删除旧版本的 Docker&#xff08;如果存在&#xff09; sudo yum remove -y docker docker-common docker-selinux docker-engine # 安装必要的软件包&#xff1a; sudo yum install -y yum-utils device-mapper-persiste…

PyCharm设置——用于调试虚拟环境中的django程序

使用Pycharm新建了一个项目。 项目目录&#xff1a;C:\Users\grace\PycharmProjects\learning_log 在该路径下安装虚拟环境ll_env&#xff0c;并在虚拟环境下安装Django。 为了调试该Django需要对PyCharm进行设置。 1、确保PyCharm使用正确的虚拟环境 打开PyCharm&#xff…

市面上前 11 名的 Android 数据恢复软件

Android数据恢复软件是恢复无意中删除的文件或文件夹的必要工具。该软件还将帮助您恢复丢失或损坏的信息。本文介绍提供数据备份和磁盘克隆选项的程序&#xff0c;这些选项有助于在Android设备上恢复文件的过程。 如果您正在寻找一种有效的方法来恢复图像&#xff0c;文档&…

qmt量化交易策略小白学习笔记第8期【qmt编程之获取股票资金流向数据--内置Python】

qmt编程之获取股票资金流向数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;需免费开通量化回测与咨询实盘权限&#xff0c;可以和博主联系&#xff01; 获取股票资金…