澄清 STM32 NVIC 中断优先级
我们来澄清一下 STM32 NVIC 中断优先级的行为,特别是在抢占优先级和响应优先级(子优先级)都相同的情况下:
核心规则回顾:
-
抢占优先级 (Preemption Priority): 决定了中断是否可以打断另一个正在执行的中断。
-
高抢占优先级(数值小)的中断可以打断低抢占优先级(数值大)的、正在执行的中断。
-
这是实现中断嵌套的关键。
-
-
响应优先级 (Subpriority): 决定了在抢占优先级相同且同时挂起的情况下,哪个中断优先得到响应。
-
它只在抢占优先级相同的中断之间比较。
-
高响应优先级(数值小)的中断会比低响应优先级(数值大)的中断先被响应。
-
它不能导致中断嵌套! 如果两个中断抢占优先级相同,即使一个的响应优先级更高,它也不能打断另一个正在执行的中断。
-
-
硬件中断号 (IRQ Number): 这是芯片设计时固定的物理编号(比如
EXTI0_IRQn=6
,EXTI1_IRQn=7
,TIM2_IRQn=28
等)。-
它只在抢占优先级和响应优先级都完全相同的情况下,作为最后的仲裁者。
-
硬件中断号越小(数值越小),优先级越高。 这与软件设置的优先级数值意义(数值小=优先级高)是一致的。
-
针对你的问题:中断执行时再中断?
-
绝对不行! 如果一个中断服务程序 (ISR) 正在执行:
-
只有抢占优先级比它更高(数值更小)的中断才能打断它(抢占它)。
-
响应优先级的高低对此毫无影响。 即使一个中断的响应优先级非常高(数值很小),只要它的抢占优先级等于或低于当前正在执行中断的抢占优先级,它就必须等待当前 ISR 执行完毕才能运行。
-
硬件中断号的高低对此更毫无影响。 中断号只在所有软件优先级都相同时决定排队顺序,它完全不具备让一个中断打断另一个正在执行中断的能力。
-
当抢占优先级和响应优先级都一样时:
-
排队顺序: 当多个中断同时发生或挂起,且它们的抢占优先级和响应优先级都完全相同时,NVIC 会根据它们的硬件中断号 (IRQ Number) 来决定响应顺序。
-
中断号越小(数值越小)的中断,会优先得到 CPU 的响应。
-
例如:中断号 6 (
EXTI0
) 会比中断号 7 (EXTI1
) 优先被响应;中断号 28 (TIM2
) 会比中断号 29 (TIM3
) 优先被响应。
-
-
执行顺序: 一旦某个中断开始执行(它的 ISR 被调用):
-
在它执行完毕(或执行到末尾的
BX LR
/ 中断返回指令)之前,任何与它抢占优先级相同或更低的中断(无论响应优先级或中断号是多少)都无法打断它。 -
那些优先级相同的中断,会按照中断号顺序在 NVIC 的挂起队列中排队等待当前 ISR 执行完毕。
-
在STM32的NVIC(嵌套向量中断控制器)中,无论你选择哪种优先级分组方式(即不管抢占优先级和响应优先级各占多少位),也无论它们的位数如何组合,都遵循一个铁律:
数值越小,优先级越高!
这个规则适用于:
-
抢占优先级 (Preemption Priority):
-
数值越小的抢占优先级,级别越高。
-
高抢占优先级(小数值)的中断可以打断低抢占优先级(大数值)的中断(正在执行的中断)。
-
这是实现中断嵌套的唯一依据。
-
-
响应优先级 (Subpriority / Response Priority):
-
数值越小的响应优先级,级别越高。
-
但是! 响应优先级只在抢占优先级相同的中断之间起作用。
-
当多个抢占优先级相同的中断同时挂起时,响应优先级高(小数值)的中断会优先被响应(先进入执行)。
-
关键点: 响应优先级不能让一个中断打断另一个正在执行的、与其抢占优先级相同的中断。它只决定在排队等待时的先后顺序。
-
优先级分组的作用:
优先级分组(通过 NVIC_SetPriorityGrouping()
或 HAL 库中的 HAL_NVIC_SetPriorityGrouping()
设置)唯一的作用是决定 4 位优先级字段 (0-15) 如何在抢占优先级和响应优先级之间进行分配。 它不改变“数值越小,优先级越高”这个根本规则。
分组举例说明规则不变性:
假设优先级分组设置为 NVIC_PRIORITYGROUP_2
(抢占优先级占 2 位 [0-3],响应优先级占 2 位 [0-3]):
-
抢占优先级:
0
(最高) >1
>2
>3
(最低) -
响应优先级:
0
(最高) >1
>2
>3
(最低) -
中断 A: 抢占优先级=
1
, 响应优先级=0
-
中断 B: 抢占优先级=
1
, 响应优先级=3
-
比较: 抢占优先级相同(都是
1
),比较响应优先级。A的响应优先级0
> B的响应优先级3
,所以 A 会优先于 B 被执行(如果两者同时挂起)。
-
-
中断 C: 抢占优先级=
0
-
比较 vs A/B: C的抢占优先级
0
> A/B的抢占优先级1
。因此,无论C的响应优先级是多少(即使C的响应优先级是3
,A的是0
),C 都可以打断 正在执行的 A 或 B,因为 C 的抢占优先级更高(数值更小)。
-
再假设分组设置为 NVIC_PRIORITYGROUP_4
(抢占优先级占 4 位 [0-15],无响应优先级位):
-
抢占优先级:
0
(最高) >1
>2
> ... >15
(最低) — 此时响应优先级不存在或固定为0。 -
中断 D: 抢占优先级=
5
-
中断 E: 抢占优先级=
10
-
比较: D的抢占优先级
5
> E的抢占优先级10
(数值5 < 10)。所以 D 可以打断 E。
-
-
中断 F: 抢占优先级=
0
-
比较 vs D/E: F的抢占优先级
0
> D的5
> E的10
。F可以打断D或E。
-
总结关键点:
-
数值小 = 优先级高: 这是STM32 NVIC优先级(无论是抢占还是响应)的绝对核心规则,适用于所有配置。
-
分组改变分配,不改变规则: 优先级分组只改变4位优先级值中多少位解释为抢占优先级,多少位解释为响应优先级。它不改变每个部分内部“数值小=优先级高”的比较逻辑。
-
抢占优先级决定嵌套: 只有更高抢占优先级(更小数值)的中断才能打断当前中断。
-
响应优先级决定排队: 仅在抢占优先级相同时,更高响应优先级(更小数值)的中断先执行。它不影响打断能力。
-
中断号是最终仲裁: 当抢占和响应优先级都完全相同时,硬件中断号小(数值小)的优先。这同样符合“数值小=优先级高”的延伸逻辑,且只影响排队,不影响打断。
相关文章:
澄清 STM32 NVIC 中断优先级
我们来澄清一下 STM32 NVIC 中断优先级的行为,特别是在抢占优先级和响应优先级(子优先级)都相同的情况下: 核心规则回顾: 抢占优先级 (Preemption Priority): 决定了中断是否可以打断另一个正在执行的中断。 高抢占优…...

2025东南亚跨境选择:Lazada VS. Shopee深度对比
东南亚电商市场持续爆发,2025年预计规模突破2000亿美元。对跨境卖家而言,Lazada与Shopee仍是两大核心战场,但平台生态与竞争格局已悄然变化。深入对比,方能制胜未来。 一、平台基因与核心优势对比 维度 Lazada (阿里系) Shopee …...
如何做好一份技术文档?(上篇)
如何做好一份技术文档?(上篇) 上篇:技术文档的基石设计 ——构建可持续迭代的文档体系 文档金字塔模型 [概念层] 为什么 —— 设计理念/适用场景 ▲ [指南层] 怎么做 —— 任务教程/最佳实践 ▲ [参考层] 是什么 ——…...
StarRocks
StarRocks 是一款由中国公司 北京快立方科技有限公司(Fenruilab)开发的 高性能分析型数据库,专注于解决大规模数据分析和实时查询场景的需求。它基于 MPP(大规模并行处理)架构设计,具备高并发、低延迟、易扩…...

Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

.NET 8集成阿里云短信服务完全指南【短信接口】
文章目录 前言一、准备工作1.1 阿里云账号准备1.2 .NET 8项目创建 二、集成阿里云短信SDK2.1 安装NuGet包2.2 配置阿里云短信参数2.3 创建配置类 三、实现短信发送服务3.1 创建短信服务接口3.2 实现短信服务3.3 注册服务 四、创建控制器五、测试与优化5.1 单元测试5.2 性能优化…...

实现仿中国婚博会微信小程序
主要功能: 1、完成底部标签导航设计、首页海报轮播效果设计和宫格导航设计,如图1所示 2、在首页里,单击全部分类宫格导航的时候,会进入到全部分类导航界面,把婚博会相关内容的导航集成到一个界面里,如图2…...
互联网大厂Java面试:从Spring Cloud到Kafka的技术考察
场景:互联网大厂Java求职者面试 面试官与谢飞机的对话 面试官:我们先从基础开始,谢飞机,你能简单介绍一下Java SE和Java EE的区别吗? 谢飞机:哦,这个简单。Java SE是标准版,适合桌…...
策略梯度核心:Advantage 与 GAE 原理详解
一.Advantage(优势函数)详解 什么是 Advantage? Advantage 表示当前动作比平均水平好多少。 其定义公式为: A ( s , a ) Q ( s , a ) − V ( s ) A(s, a) Q(s, a) - V(s) A(s,a)Q(s,a)−V(s) 其中: Q ( s , a ) …...
Python 使用总结之:Python 文本转语音引擎 - pyttsx3 完全指南
文本转语音(TTS,Text-to-Speech)技术已经广泛应用于语音助手、智能硬件、教育软件等多个领域。Python 提供了多个库来实现 TTS,其中 pyttsx3 是一个非常常用的跨平台 TTS 引擎。本文将详细介绍如何使用 pyttsx3 实现文本转语音的功…...

星闪开发之Server-Client 指令交互控制红灯亮灭案例解析(SLE_LED详解)
系列文章目录 星闪开发之Server-Client 指令交互控制红灯亮灭的全流程解析(SLE_LED详解) 文章目录 系列文章目录前言一、项目地址二、客户端1.SLE_LED_Client\inc\SLE_LED_Client.h2.SLE_LED_Client\src\SLE_LED_Client.c头文件与依赖管理宏定义与全局变…...

day25-计算机网络-3
1. DNS解析流程 windows host文件是否配置域名对应的ip查询本地DNS缓存是否有这个域名对应的ip询问本地DNS(网卡配置的)是否知晓域名对应的ip本地DNS访问根域名解析服务器,但是根DNS只有顶级域名的记录,根告诉我们.cn顶级域名的D…...

【ArcGIS应用】ArcGIS应用如何进行影像分类?
ArcGIS应用如何进行影像分类?...

RunnablePassthrough介绍和透传参数实战
导读:在构建复杂的LangChain应用时,你是否遇到过需要在处理链中既保留原始输入又动态扩展上下文的场景?RunnablePassthrough正是为解决这类数据流处理问题而设计的核心组件。 本文通过深入剖析RunnablePassthrough的工作机制和实际应用&#…...

JavaSec-XSS
反射型XSS 简介 XSS(跨站脚本攻击)利用浏览器对服务器内容的信任,攻击者通过在网页中注入恶意脚本,使这些脚本在用户的浏览器上执行,从而实现攻击。常见的XSS攻击危害包括窃取用户会话信息、篡改网页内容、将用户重定向到恶意网站,…...
AtCoder-abc408_b 解析
题目链接 让我们一步一步详细分析这个问题: 题目要求我们实现去重并排序的功能,这在C中可以直接使用set容器来实现。set是STL中的一个关联容器,具有以下特性: 自动去重:所有元素都是唯一的自动排序:默认…...

echarts在uniapp中使用安卓真机运行时无法显示的问题
文章目录 一、实现效果二、话不多说,上源码 前言:我们在uniapp中开发的时候,开发的时候很正常,echarts的图形在h5页面上也是很正常的,但是当我们打包成安卓app或者使用安卓真机运行的时候,图形根本就没有渲…...

STM32----IAP远程升级
一、概述: IAP,全称是“In-Application Programming”,中文解释为“在程序中编程”。IAP是一种对通过微控制器的对外接口(如USART,IIC,CAN,USB,以太网接口甚至是无线射频通道&#…...

C++优选算法 904. 水果成篮
文章目录 1.题目描述2.算法思路 3.完整代码容器做法数组做法 1.题目描述 看到这种题目,总觉得自己在做阅读理解,晕了,题目要求我们在一个数组里分别找出两种数字,并统计这两种数字分别出现一共是多少。 2.算法思路 采用哈希表滑…...

Python6.5打卡(day37)
DAY 37 早停策略和模型权重的保存 知识点回顾: 过拟合的判断:测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint,还包含训练状态 早停策略 作业:对信贷数据集训练后保存权重…...

大中型水闸安全监测管理系统建设方案
一、背景介绍 我国现已建成流量5m/s及以上的水闸共计100321座。其中,大型水闸923座,中型水闸6,697座。按功能类型划分,分洪闸8193座,排(退)水闸17808座,挡潮闸4955座,引水闸13796座&…...
Compose Multiplatform 实现自定义的系统托盘,解决托盘乱码问题
Compose Multiplatform是 JetBrains 开发的声明式 UI 框架,可让您为 Android、iOS、桌面和 Web 开发共享 UI。将 Compose Multiplatform 集成到您的 Kotlin Multiplatform 项目中,即可更快地交付您的应用和功能,而无需维护多个 UI 实现。 在…...

风控研发大数据学习路线
在如今信息爆炸时代,风控系统离不开大数据技术的支撑,大数据技术可以帮助风控系统跑的更快,算的更准。因此,风控技术研发需要掌握大数据相关技术。然而大数据技术栈内容庞大丰富,风控研发同学很可能会面临以下这些痛点…...

【设计模式】门面/外观模式
MySQL ,MyTomcat 的启动 现在有 MySQL ,MyTomcat 类,需要依次启动。 public class Application {public static void main(String[] args) {MySQL mySQL new MySQL();mySQL.initDate();mySQL.checkLog();mySQL.unlock();mySQL.listenPort(…...

spring的webclient与vertx的webclient的比较
Spring WebClient 和 Vert.x WebClient 都是基于响应式编程模型的非阻塞 HTTP 客户端,但在设计理念、生态整合和适用场景上存在显著差异。以下是两者的核心比较: 🔄 1. 技术背景与架构 • Spring WebClient ◦ 生态定位:属于 Sp…...

贪心算法应用:埃及分数问题详解
贪心算法与埃及分数问题详解 埃及分数(Egyptian Fractions)问题是数论中的经典问题,要求将一个真分数表示为互不相同的单位分数之和。本文将用2万字全面解析贪心算法在埃及分数问题中的应用,涵盖数学原理、算法设计、Java实现、优…...

高效集成AI能力:使用开放API打造问答系统,不用训练模型,也能做出懂知识的AI
本文为分享体验感受,非广告。 一、蓝耘平台核心功能与优势 丰富的模型资源库 蓝耘平台提供涵盖自然语言处理、计算机视觉、多模态交互等领域的预训练模型,支持用户直接调用或微调,无需从零开始训练,显著缩短开发周期。 高性能…...

Qt 仪表盘源码分享
Qt 仪表盘源码分享 一、效果展示二、优点三、源码分享四、使用方法 一、效果展示 二、优点 直观性 数据以图表或数字形式展示,一目了然。用户可以快速获取关键信息,无需深入阅读大量文字。 实时性 仪表盘通常支持实时更新,确保数据的时效性。…...

Python数据可视化科技图表绘制系列教程(四)
目录 带基线的棒棒糖图1 带基线的棒棒糖图2 带标记的棒棒糖图 哑铃图1 哑铃图2 包点图1 包点图2 雷达图1 雷达图2 交互式雷达图 【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博…...
RPM 数据库修复
RPM 数据库修复 1、备份当前数据库(重要!) sudo cp -a /var/lib/rpm /var/lib/rpm.backup此操作保护原始数据,防止修复失败导致数据丢失 2、清除损坏的锁文件 sudo rm -f /var/lib/rpm/__db.*这些锁文件(如 __db.00…...