高优先级“插队”,低优先级让路:中断嵌套的核心规则

短文标题:高优先级"插队",低优先级让路:中断嵌套的核心规则

你有没有想过一个问题:1ms的SysTick定时器中断正在执行,这时紧急的过流保护中断来了,CPU能立刻响应吗?**能。只要过流保护中断的抢占优先级比SysTick高。**NVIC的抢占机制,让高优先级中断可以"插队"------打断正在执行的低优先级中断。

抢占优先级决定"能不能打断"

优先级数值越小,优先级越高(0是最高,15是最低)。

子优先级:同时到达时谁先执行 抢占优先级相同时,子优先级决定顺序(数值越小越先)。但不能打断(抢占相同不打断)。

// 抢占相同(都是1),子优先级不同

HAL_NVIC_SetPriority(USART1_IRQn, 1, 0); // 子0

HAL_NVIC_SetPriority(EXTI0_IRQn, 1, 1); // 子1

  • 同时到达 → 子0先执行
  • USART1正在执行,EXTI0后到 → 不打断,等USART1执行完再执行EXTI0

自然优先级:最后的"仲裁者", 如果抢占和子优先级都相同,最后看中断向量表中的位置(中断号小优先级高)。EXTI0(中断号6)和USART1(中断号37)设置完全相同,同时到达时EXTI0先执行(硬件固定,不能改)。

**抢占优先级的"危险",**高优先级中断执行时间过长会"饿死"低优先级中断。按键中断里写个HAL_Delay(100)------100ms内其他中断进不来,串口数据丢失,定时器不准。

中断服务函数必须"短平快":耗时操作(数据处理、打印)放主循环或RTOS任务里。

**优先级分组的影响,**通过SCB->AIRCR的PRIGROUP字段决定4个优先级位如何划分:

**这个故事的启示,**中断优先级是系统的"交通规则":

  • 高抢占 = 救护车,可以闯红灯
  • 抢占相同 = 普通车道,排队通行
  • 子优先 = 同车道内排队的先后

设对了,系统稳;设错了,中断堵死,系统崩。

写在最后, 电机急停、过流保护 → 设最高抢占优先级(0)。串口打印、按键扫描 → 设低抢占优先级。紧急的中断优先响应,不紧急的排队等候。


(本文灵感源于于振南《新概念ARM32单片机》教程第5.6节、第5.9节。)

觉得有用?点赞、转发,让更多人看懂中断嵌套的"插队"规则。

相关推荐
恒锐丰小瑞9 小时前
率能SS8841T 40V/2.5A/双通道H桥驱动芯片,PWM控制接口与低导通电阻(350mΩ),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·机器人
zcmodeltech10 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
徽京人11 小时前
VS Code 接入Esp 32步骤
vscode·单片机·嵌入式硬件
QH1392923188012 小时前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
笨笨饿13 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
捷瑞电子工坊14 小时前
FreeRTOS事件组:多任务同步的利器
stm32·嵌入式·freertos·实时操作系统·标准外设库·事件组·任务同步
笨笨饿15 小时前
#109_BK7258 蓝牙 A2DP 音频数据通路深度解析
python·stm32·单片机·mcu·物联网·编辑器·音视频
千秋岁rr15 小时前
5.0 TIM
单片机·嵌入式硬件
qq_4017004116 小时前
ADC基准电压与参考电压详细解读:以STM32和28335为例
stm32·单片机·嵌入式硬件
小僧景贤16 小时前
STM32 startup.s 启动文件与 .map 映射文件深度技术解析(md/hd 版本差异化对比)
stm32·内存映射·startup.s·map 文件·单片机启动流程