ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/8/3 4:09:20 拓冰建站 浏览量
高优先级“插队”,低优先级让路:中断嵌套的核心规则 短文标题高优先级“插队”低优先级让路中断嵌套的核心规则你有没有想过一个问题1ms的SysTick定时器中断正在执行这时紧急的过流保护中断来了CPU能立刻响应吗能。只要过流保护中断的抢占优先级比SysTick高。NVIC的抢占机制让高优先级中断可以“插队”——打断正在执行的低优先级中断。抢占优先级决定“能不能打断”优先级数值越小优先级越高0是最高15是最低。子优先级同时到达时谁先执行抢占优先级相同时子优先级决定顺序数值越小越先。但不能打断抢占相同不打断。// 抢占相同都是1子优先级不同HAL_NVIC_SetPriority(USART1_IRQn, 1, 0); // 子0HAL_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节。觉得有用点赞、转发让更多人看懂中断嵌套的“插队”规则。