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

目录

中断概念的引入

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.mzph.cn/diannao/13712.shtml

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

相关文章

【BSP开发经验】简易文件系统digicapfs实现方式

文章目录 背景Linux vfs框架介绍数据结构系统调用openwriteread 总体框架 Linux 磁盘高速缓存机制标准文件访问同步文件访问异步文件访问buffer_head 如何实现一个简单的文件系统blkdevfs注册文件系统产生一个文件让文件变得可读可写 背景 在新的分区升级启动方案中需要分别实…

OGG几何内核-BRepBuilderAPI_MakeEdge学习

OGG几何内核fork自OCCT 7.7.0, BRepBuilderAPI_MakeEdge是几何内核的一个重要和基础的功能,也十分复杂,因为要支持line、circle、ellipse,parabola,hyperbola,circle,beziercurve,b…

springboot常用的注解

启动注解(Spring Boot 应用的入口注解)@SpringBootApplication @SpringBootApplication 是一个注解,它是 Spring Boot 应用的入口注解,用于表示一个应用程序的主类。这个注解通常被放置在包含 main() 方法的类上。@SpringBootApplication 是一个组合注解,整合了以下三个注…

亚马逊测评还能做吗?

只能说测评不是唯一的手段,但是推销量的一把好手。首先测评能让listing快速成长,短期内有望成为爆款,速度快,利润高,回款快。相对其他推广,测评无疑是有效,省培养listing的方法。其次新品前期太…

设计模式六大原则

开闭原则:对修改封闭,对拓展开放。 单一职责原则:类的功能要专一。 里氏代换原则:子类继承父类的时候,除添加新的方法完成新增功能外,尽量不要重写父类方法。 依赖倒转原则:类要依赖接口&…

Hsql每日一题 | day01

前言 就一直向前走吧,沿途的花终将绽放~ 题目:找出连续活跃3天及以上的用户 create table t_useractive(uid string,dt string );insert into t_useractive values(A,2023-10-01),(A,2023-10-02),(A,2023-10-03),(A,2023-10-04),(B,2023-10-01),(B…

代码随想录打卡第38天:动态规划解决编辑距离和回文串

1.72编辑距离 1.问题描述 找到其中需要进行操作的最少次数。 2.问题转换 大体思路可以参照前面的两个字符串的删除操作。添加操作可以将其看做是一个另类的删除操作,所以最后全部都可以看做是一个删除操作 3.解题思路 每一个位置的word1[i]和word2[j]都有两种…

RTOS原理和应用总结

RTOS的作用 RTOS一般应用在中低端处理器当中,这里举一个笔者日常开发遇到的案例来说明RTOS的作用。 假设你有一个设备,这个设备的外围硬件很多,假设有LED、一个网口、若干RS232等等。 在没有RTOS的时候,我们用裸机编程来写&…

HTML5 多媒体应用技术

目录 多媒体元素 audio元素video元素多媒体事件与JavaScript交互音频和视频轨道(Track)媒体API MediaElement APIMediaSource Extensions (MSE)Encrypted Media Extensions (EME)Web Audio API

数据库同步软件,天不生PanguSync万古如长夜

在信息时代的海洋中,数据是那永不熄灭的灯塔,照亮了科技发展的航道。然而,随着数据的膨胀和应用场景的多样化,如何确保这些宝贵资源在不同平台、不同设备间实时更新、保持一致性,便成了一道亟待解决的难题。于是&#…

Android File Transfer for mac(强大的安卓文件传输工具) 直装版

Android File Transfer是一款专门为Mac用户设计的软件,它用于在Android设备与Mac之间传输文件。这款软件提供了简单直观的操作界面,使用户能够轻松地在Android设备和Mac之间传输和管理文件。 下载地址:https://www.macz.com/mac/7099.html?i…

使用python实现socket进行消息传输-demo

Socket 是什么 Socket 是一种在计算机网络中用于实现进程间通信的一种机制。它是网络编程中的重要概念,通过它可以在不同的计算机之间进行数据传输和通信。Socket 可以用于实现各种网络应用,包括客户端-服务器模型、P2P 应用等。基本上,Sock…

自动驾驶决策规划算法——二次规划

自动驾驶决策规划算法第二章第二节(中) 参考线算法_哔哩哔哩_bilibili 动态规划开辟的凸空间如下,两条橙色线之间: 黄色的点就意味着L的上下界,物理意义是当轨迹ss1时,L的范围应该是(Lmin1,Lmax1)之间,这个范围就是开辟…

学习日记.1

今天就是配置了droidbot的环境。主要的知识来源是GitHub - xieincz/droidbot: A lightweight test input generator for Android. Similar to Monkey, but with more intelligence and cool features! 看readme,注意只需要platform就好,sdk太大不用下载…

《Ai企业知识库》-模型实践-rasa开源学习框架-基础理论-02

rasa官网 Conversational AI Platform | Superior Customer Experiences Start Here rasa简介: Rasa是一个开源的机器学习框架,专门用于构建自动化的文本和语音对话系统,即聊天机器人。它允许开发者和企业创建定制化的对话体验&#xff0c…

ubuntu设置root开机登录,允许root用户ssh远程登录

ubuntu与centos系统不同,默认root开机不能登录。 1、输入一下命令创建root密码,根据提示输入新密码 sudo passwd root 2、打开gdm-autologin文件,将auth required pam_succeed_if.so user ! root quiet_success这行注释掉,这行就…

el-upload 上传多个视频

<el-form-item label"视频" prop"video_url"><el-uploadclass"upload-demo"ref"uploadRef":multiple"true":on-change"handleChange":before-remove"beforeRemove":before-upload"before…

Flutter 中的 EditableText 小部件:全面指南

Flutter 中的 EditableText 小部件&#xff1a;全面指南 在Flutter中&#xff0c;EditableText是一个低级别的文本编辑组件&#xff0c;它提供了构建自定义文本编辑界面的能力。与TextField和TextFormField不同&#xff0c;EditableText提供了更多的灵活性&#xff0c;允许开发…

【LinuxC语言】链接文件

文章目录 前言一、inode索引节点inode的作用为什么inode重要 二、文件链接的定义文件链接是什么硬链接&#xff08;Hard Link&#xff09;软链接&#xff08;符号链接&#xff0c;Symbolic Link&#xff09;硬链接图示&#xff1a;软链接图示&#xff1a; 硬链接应用场景限制和…

五步定位性能瓶颈

一、着手测试前的准备&#xff1a;优化数据流向与系统架构分析 在进行性能测试或系统优化之前&#xff0c;明确数据流向和系统架构的细节是至关重要的步骤。这不仅能够帮助识别潜在的瓶颈&#xff0c;还能确保测试用例设计的全面性与针对性。以下是关键步骤和方法&#xff1a;…