【回眸】牛客网刷刷刷!(八)——中断专题

目录

前言

1、在CortexM内核中,当系统响应一个中断时

2、用与非门和或非门可以实现其他基本门电路。进而实现任何逻辑电路

3、cpu interface提供了功能包含

4、以Cortex-M3内核为例,如果某个中断在得到响应之前,其请求信号以若干的脉冲的方式呈现,则处理器处理的方式是

5、在Linux中,中断分为向量中断和非向量中断

6、对于ARM的处理器,中断给处理器提供了触觉,使处理器能够感知到外界的变化,从而实时的处理。ARM cortex-A系列处理器,提供了4个管脚给soc,实现外界中断的传递,分别是

7、关于中断的描述

8、总线fault是一种严重的错误

9、在Cortex-M系列内核架构中,总线fault 状态寄存器(BFSR)用来记录总线fault中断源,关于总线fault 状态寄存器中断源的描述

10、在CortexM内核中,已经内建了对中断嵌套的全力支持,无需使用汇编写代码,只需要为每个中断适当地建立优先级就可以

11、能够触发中断的信号叫中断源,常见的中断源有

12、存储器管理中断多与MPU有关,其诱因常常是某次访问触犯了MPU设置的保护策略

13、CortexM的Fault 类异常不包括

14、在CortexM内核中,建立一个外部中断的正确顺序

15、中断可分为内部中断和外部中断

16、电机的类型有很多种,若按照能量转换的角度进行划分,可分为

17、在Cortex-M3内核架构中,如果需要动态地更改中断向量表,则对于任何器件来说,中断向量表的起始处都必须包含的向量是

18、中断优先级

19、中断4状态

20、在系统中,中断处理是由内核执行的最敏感的任务之一,因为它必须满足一些约束条件

21、关于GIC中断的边沿触发处理说法

22、IRI与cpu interface通过gic stream协议传输信息,传输的信息,是以包为单位。包,分为两类包

23、中断延迟的定义

24、下面对Linux中IDT的描述

25、关于Linux中struct irq_domain的描述

26、NVIC 中断控制器是物联网芯片常用的中断控制器,在NVIC 的中断控制及状态寄存器中,记录当前正服务中断编号的寄存器是

前言

本周日常学习的内容是中断相关的专项练习,中断也算是博主一个渐进明细的知识点,本篇整理了相关易错点和较为重要的知识点。

1、在CortexM内核中,当系统响应一个中断时

当CM3开始响应一个中断时,系统内部主要有以下操作:
入栈: 把8个寄存器的值压入栈
取向量:从向量表中找出对应的服务程序入口地址
选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC。
重定位向量是在系统初始化时完成的

2、用与非门和或非门可以实现其他基本门电路。进而实现任何逻辑电路

3、cpu interface提供了功能包含

cpu interface提供了以下的功能:
将中断请求发送给cpu
对中断进行认可(acknowledging an interrupt)
中断完成识别(indicating completion of an interrupt)
设置中断优先级屏蔽
定义中断抢占策略
决定当前处于pending状态最高优先级中断

4、以Cortex-M3内核为例,如果某个中断在得到响应之前,其请求信号以若干的脉冲的方式呈现,则处理器处理的方式是

中断信号一般是接入到中断控制器中,中断控制器需要判断和过滤中断信号,如果某个中断在得到响应之前,其请求信号以若干的脉冲的方式呈现,中断处理器视为只有一次中断请求,多出的请求脉冲会全部错失。这是情况发生一般是中断请求太快,以致于超出处理器反应限度

5、在Linux中,中断分为向量中断和非向量中断

在linux中,根据中断入口跳转方法的不同,中断分为向量中断和非向量中断。采用向量中断的CPU 通常为不同的中断分配不同的中断号,当检测到某中断号的中断到来后,就自动跳转到与该中断号对应的地址执行。不同中断号的中断有不同的入口地址。非向量中断的多个中断共享一个入口地址,进入该入口地址后再通过软件判断中断标志来识别具体是哪个中断。也就是说,向量中断由硬件提供中断服务程序入口地址,非向量中断由软件提供中断服务程序入口地址。

6、对于ARM的处理器,中断给处理器提供了触觉,使处理器能够感知到外界的变化,从而实时的处理。ARM cortex-A系列处理器,提供了4个管脚给soc,实现外界中断的传递,分别是

ARM cortex-A系列处理器,提供了4个管脚给soc,实现外界中断的传递。分别是:

  • nIRQ: 物理普通中断

  • nFIQ:  物理快速中断

  • nVIRQ: 虚拟普通中断

  • nVFIQ: 虚拟快速中断

7、关于中断的描述

当发生中断嵌套时,比如先发生中断1,紧接着中断2打断了中断1,导致中断2执行,中断2执行完成后继续执行中断1,从而导致后发生的中断先执行,因此我们常说中断的嵌套处理会改变中断处理的次序
通常情况下当发生除0时,会产生中断,但Cortex-M3&M4中可以屏蔽该中断,不过不建议屏蔽该中断
中断是可以嵌套的,刚才描述是中断1和中断2就属于中断嵌套现象
通常使用的系统调用,如果深入系统调用的实现机制,就会发现,其内部实际上是通过中断从而从用户态进入核心态。

8、总线fault是一种严重的错误

总线错误在实际工程中应该尽量避免,严重会导致系统崩溃。关于总线fault,我们需要了解:欲使能总线fault 服务例程,需要在NVIC 的“系统Handler 控制及状态寄存器”中置位BUSFAULTENA 位。要注意的是:在使能之前,总线fault 服务例程的入口地址必须已经在向量表中配置好,否则就成了作法自毙——程序可能跑飞。总线faults 发生时,只要没有同级或更高优先级的异常正在服务,且FAULTMASK=0,就会执行总线fault 的服务例程。如果在检测到总线fault 时还检测到了更高优先级的异常,则先处理后者,而总线fault 则被标记成悬起。最后,如果总线fault 被除能,或者总线fault 发生时正在处理同级或更高优先级异常,则总线fault 被迫成为“硬伤”——上访成硬fault,使得最后执行的是硬fault 的服务例程。如果在硬fault 服务例程的执行中又产生了总线fault,内核将进入锁定状态。

9、在Cortex-M系列内核架构中,总线fault 状态寄存器(BFSR)用来记录总线fault中断源,关于总线fault 状态寄存器中断源的描述

总线fault 状态寄存器中断源描述正确如下:
STKERR R/Wc :入栈时发生错误
UNSTKERR R/Wc :出栈时发生错误
IMPRECISERR R/Wc :不精确的数据访问违例
PRECISERR R/Wc : 精确的数据访问违例
IBUSERR R/Wc :取指时的访问违例

10、在CortexM内核中,已经内建了对中断嵌套的全力支持,无需使用汇编写代码,只需要为每个中断适当地建立优先级就可以

在使用中断嵌套时我们需要注意:

NVIC和CM3处理器会为我们排出优先级解码的顺序,会自动入栈和出栈。因此,在某个异常正在响应时,所有优先级不高于它的异常都不能抢占之,而且它自己也不能抢占自己。
所有服务例程都只使用主堆栈。所以当中断嵌套加深时,对主堆栈的压力会增大。并且何时嵌套多少级也是不可预料的。如果主堆栈的容量本来就已经所剩无几了,中断嵌套又突然加深,则主堆栈有被用穿的凶险。
另一个要注意的,是相同的异常是不允许重入的。因为每个异常都有自己的优先级,并且在异常处理期间,同级或低优先级的异常是要阻塞的,因此对于同一个异常,只有在上次实例的服务例程执行完毕后,方可继续响应新的请求。

11、能够触发中断的信号叫中断源,常见的中断源有

中断系统中,常见的中断源有:
外部设备请求中断。一般的外部设备(如键盘、打印机和A / D转换器等)在完成自身的操作后,向CPU发出中断请求,要求CPU为他服务。
故障强迫中断。系统在一些关键部位都设有故障自动检测装置。如运算溢出、存储器读出出错、外部设备故障、电源掉电以及其他报警信号等,这些装置的报警信号都能使CPU中断,进行相应的中断处理。
实时时钟请求中断。在控制中遇到定时检测和控制,为此常采用一个外部时钟电路控制其时间间隔。需要定时时,CPU发出命令使时钟电路开始工作,一旦到达规定时间,时钟电路发出中断请求,由CPU转去完成检测和控制工作。
数据通道中断。数据通道中断也称直接存储器存取(DMA)操作中断,如磁盘、磁带机或CRT等直接与存储器交换数据所要求的中断。
程序自愿中断。CPU执行了特殊指令或由硬件电路引起的中断是程序自愿中断,当用户调试程序时,程序自愿中断检查中间结果或寻找错误所在而采用的检查手段,如断点中断和单步中断等。

12、存储器管理中断多与MPU有关,其诱因常常是某次访问触犯了MPU设置的保护策略

存储器管理中断是实际应用中遇到最多的异常情况之一,能够触发存储器管理中断的原因坑你是访问了 MPU 设置区域覆盖范围之外的地址,往只读寄存器 写数据,用户级下访问了只允许在特权级下访问的地址和在不可执行的存储器区域试图取指。这里需要注意的是,即使没有MPU在不可执行的存储器区域试图取指也会触发存储器管理中断。

13、CortexM的Fault 类异常不包括

总线 faults
存储器管理 faults
用法 faults
硬 fault

14、在CortexM内核中,建立一个外部中断的正确顺序

正确的顺序是
1. 当系统启动后,先设置优先级组寄存器。
2. 如果需要重定位向量表,先把硬fault和NMI服务例程的入口地址写到新表项所在的地址中。
3. 配置向量表偏移量寄存器,使之指向新的向量表。
4. 为该中断建立中断向量。
5. 为该中断设置优先级。
6. 使能该中断

15、中断可分为内部中断和外部中断

中断可分为内部中断和外部中断,内部中断的中断源来自CPU内部如:软件中断指令、溢出、除法错误等,操作系统从用户态切换到内核态需借助CPU内部的软件中断。外部中断的中断源来自CPU外部,由外设提出请求。定时器属于CPU外设定时模块,因此属于外部中断。

16、电机的类型有很多种,若按照能量转换的角度进行划分,可分为

从能量转换的角度,发电机为机械能转换为电能,电动机为电能转换为机械能,变压器为电能形式转换。从电流的角度划分为直流电机和交流电机。从运动方式划分为旋转电机、直线电机、静止电机。从使用场合划分为潜水电机、防爆电机、航空电机。

17、在Cortex-M3内核架构中,如果需要动态地更改中断向量表,则对于任何器件来说,中断向量表的起始处都必须包含的向量是

如果需要动态地更改向量表,则对于任何器件来说,向量表的起始处都必须包含以下向量:
主堆栈指针(MSP)的初始值
复位向量
NMI
硬 fault 服务例程
除了主堆栈指针和复位向量这两个系统启动必须使用的,后两者也是必需的,因为有可能在引导过程中发生这两种异常。

18、中断优先级

19、中断4状态

对于每一个中断而言,有以下4个状态:
inactive:中断处于无效状态
pending:中断处于有效状态,但是cpu没有响应该中断
active:cpu在响应该中断
active and pending:cpu在响应该中断,但是该中断源又发送中断过来

20、在系统中,中断处理是由内核执行的最敏感的任务之一,因为它必须满足一些约束条件

中断处理是由内核执行的最敏感的任务之一,它必须满足下列约束:
中断应该被尽可能快地处理完。
中断处理程序必须编成使相应的内核控制路径能以嵌套的方式执行。
内核在处理一个中断时,可接受新的中断。但存在一个临界区,中断必须被禁止。
 所以在常见的中断编程中,中断的设计一般将中断处理程序分为两部分执行,即上半部和下半部函数。上半部为中断被禁止的临界区,执行关键而紧急的任务,如把接收到的帧拷贝到输入队列,以便下半部函数执行时能进行处理。
中断可以丰富编程逻辑和架构

21、关于GIC中断的边沿触发处理说法

边沿触发处理:

外部边沿中断到达,中断状态被置为pending状态。

软件读取IAR寄存器值,表示PE认可该中断,中断状态被置为active状态

软件中断处理完毕后,写EOIR寄存器,表示优先级重置。过一段时间后,写DIR寄存器,中断状态被置为idle状态。

22、IRI与cpu interface通过gic stream协议传输信息,传输的信息,是以包为单位。包,分为两类包

RI与cpu interface通过gic stream协议传输信息,传输的信息,是以包为单位。包,分为两类包:

  • 命令包,分为redistributor命令包,cpu interface命令包

  • 响应包,分为redistributor响应包,cpu interface响应包

AXI-stream协议,每次传输2个字节,多次传输,组成一个包。不同的包,大小不是一样的,比如有的是16个字节,有的是8个字节

23、中断延迟的定义

在设计实时系统时,必须对中断延迟进行严肃和仔细地估算,因为这对程序执行的流程有着重大的影响。中断延迟的定义是从检测到某中断请求,到执行了其服务例程的第一条指令时,已经流逝了的时间。

24、下面对Linux中IDT的描述

对于大多数人来说,不会过多的关注IDT,通常在Linux中只需使用中断的API来进行中断配置和处理,但中断是怎么工作起来的呢?实际上IDT起着比较重要的作用,IDT需要在内核引导的过程中进行初始化的

25、关于Linux中struct irq_domain的描述

硬中断号:中断控制器是采用硬中断号标识外设的中断。

软中断号:CPU需要通过该号来识别中断,假如有多个中断控制器,每个中断控制器各自对应16个从0到15的中断号,那CPU收到这个号后,不知道这个中断是从哪一个中断控制器派发过来的,因此引出了irq_domain的概念

在系统启动分配irq_domain时,就会调用函数__irq_domain_add把irq_domain加入到该链表张

除了线性映射外,还有基树映射,直接映射等,这些方法目前内核中有对应API接口,如irq_domain_add_linear, irq_domian_add_tree等

26、NVIC 中断控制器是物联网芯片常用的中断控制器,在NVIC 的中断控制及状态寄存器中,记录当前正服务中断编号的寄存器是

在实际应用中,我们调试程序有时需要知道当前中断服务号是多少,我们可以查看NVIC中断控制器。在NVIC 的中断控制及状态寄存器中,记录当前正服务中断编号的寄存器IPSR。EXTI_IMR是中断屏蔽寄存器,EXTI_EMR是事件屏蔽寄存器。EXTI_RTSR是上升沿触发选择寄存器。

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

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

相关文章

windows 下载安装 mysql

windows 下载安装 mysql 官网地址:https://dev.mysql.com/ 下载地址:https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-8.0.34.0.msi 点击 Downloads 点击 MySQL Community (GPL) Downloads 点击 MySQL Installer for Window…

【Vue】

Vue 简介 Vue.js(通常简称为Vue)是一种流行的JavaScript前端框架,用于构建交互式和动态的用户界面(UI)。Vue的特点包括: 轻量级:Vue.js是一个轻量级框架,文件大小小,易于…

qt 正则表达式

以上是正则表达式的格式说明 以下是自己写的正则表达式 22-25行 是一种设置正则表达式的方式, 29-34行 : 29行 new一个正则表达式的过滤器对象 30行 正则表达式 的过滤格式 这个格式是0-321的任意数字都可以输入 31行 将过滤格式保存到过滤器对象里面 32行 将验…

java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?

当使用 Logback 日志框架和 RabbitMQ 的 RabbitHandler 注解时,如果无法获取消费的 traceId 信息,可能是因为在处理 RabbitMQ 消息时,没有正确地将 traceId 传递到日志中。 为了将 traceId 传递到日志中,你可以利用 MDC&#xff…

NPM使用技巧

NPM使用技巧 前言技巧全局模块位置PowerShell报错安装模块冲突 NPM介绍NPM命令使用方法基本命令模块命令查看模块运行命令镜像管理 常用模块rimrafyarn 前言 本文包含NodeJS中NPM包管理器的使用技巧,具体内容包含NPM介绍、NPM命令、常用模块等内容,还包…

RK3399平台开发系列讲解(内核调试篇)USB摄像头快速测试

🚀返回专栏总目录 文章目录 一、检测设备二、安装必要的库三、 mjpeg-stream 安装四、实时预览沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇介绍如何快速测试 USB 摄像头。 一、检测设备 将 USB 摄像头插上,查看是否找到设备,输入指令:v4l2-ctl --list-d…

谈一谈冷门的C语言爬虫

目录 C语言写爬虫是可行的 C语言爬虫不受待见 C语言爬虫有哪些可用的库和工具 C语言爬虫示例 总结 在当今的编程世界中,C语言相比于一些主流编程语言如Python、JavaScript等,使用范围相对较窄。然而,尽管C语言在爬虫领域的应用并不常见&…

uniapp:蓝牙设备ios与安卓端deviceId不一致问题及ios端获取蓝牙mac地址方法

问题 在uniapp开发项目中,主要是指APP端,使用API接口:uni.getBluetoothDevices或者uni.onBluetoothDeviceFound查找到的蓝牙设备数据里deviceId值不一样: 在安卓中deviceId即mac地址 在ios中deviceId即uuid 如何在ios端也能获取到…

Spring03

Spring03 1.bean的生命周期函数 初始化方法和销毁方法 init-method"初始化方法" destroy-method"销毁方法"2.DI依赖注入 依赖注入(Dependency Injection,DI)是一种设计模式,它用于解耦组件之间的依赖关系…

Django Form实现表单使用及应用场景

首先需要定义一个使用场景: 音乐网站的前端部分可以添加上传歌手的单曲, 这个添加页面就使用django form表单来实现。 目录 数据表内容 歌手表及表模型 单曲表及表模型 演示表单使用 设置路由 创建form.py 视图实例化表单类 模板使用表单对象 表…

Spring系列文章1:Spring入门程序

一、什么是spring 一个java框架、java语言开发,轻量级、开源框架、在j2se、j2ee中都可以使用。它是一个管理对象的容器,Spring 容器不装文本,数字。装的是java对象。 核心技术:ioc、aop 官网地址 https://spring.io 项目列表…

第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

9月11日,每日信息差

今天是2023年09月11日,以下是为您准备的13条信息差 第一、微软已停止向俄罗斯提供服务,俄罗斯接下来的举动震惊世人!对此俄罗斯回应称,他们将把微软的收费版改为免费版并推广至全球 第二、我国首套海洋漂浮式温差能发电装置完成…

包管理工具--》其他包管理器之cnpm、pnpm、nvm

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用(一) 二、包管理工具--》npm的配置及使用(二) 三、包管理工具--》发布一个自己的npm包 四、包管理工具--》yarn的配置及使用 五、包管理工具--》其他包管理器之cnpm…

某技术公司技术二面面试题总结

存在一个单体架构的服务,怎么拆分为微服务的架构 将一个单体应用程序拆分成微服务架构是一个复杂的过程,需要深入的计划和实施。以下是一般的步骤和策略,可以帮助您成功地将单体应用程序拆分为微服务: 理解单体应用程序&#xff…

软件设计师学习笔记10-死锁资源数计算+进程资源图+段页式存储

目录 1.死锁资源数计算 1.1死锁 1.2进程管理与死锁资源的计算 2.进程资源图 3.段页式存储 3.1页式存储 3.1.1页式存储组织 3.1.2完整页表及页面淘汰原则 3.1.3页面置换算法(了解一下) 3.2段式存储 1.死锁资源数计算 1.1死锁 (1)死锁的概念:所谓死锁&…

Matlab学习-自定义函数

Matlab学习-自定义函数 常用自定义函数 文章目录 Matlab学习-自定义函数1. 打印时间2. 计算统计参数3. 画图函数 1. 打印时间 function result calculate_time(time)% Function describe : calculate time% Input : time:N*1% Output : result.hour/min/sec hour/min/sec…

构建全面 AI Agent 解决方案:Chocolate Factory 框架的文本到 UI、图表和测试用例生成...

长太不看版:基于领域驱动设计思考的 AI Agent 框架 Chocolate Factory,框架现在还在 PoC 阶段,欢迎加入开发。(当前主要关注于 SDLC AIGC 的场景)。 GitHub:https://github.com/unit-mesh/chocolate-facto…

ffmpeg安装及使用

centos linux下安装ffmpeg 1、下载解压 wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz tar -zxvf ffmpeg-3.1.tar.gz 2、 进入解压后目录,输入如下命令/usr/local/ffmpeg为自己指定的安装目录 cd ffmpeg-3.1 ./configure --prefix/usr/local/ffmpeg make &&a…

文件上传之图片马混淆绕过与条件竞争

一、图片马混淆绕过 1.上传gif imagecreatefromxxxx函数把图片内容打散,,但是不会影响图片正常显示 $is_upload false; $msg null; if (isset($_POST[submit])){// 获得上传文件的基本信息,文件名,类型,大小&…