查看: 5|回复: 0

中断为什么有的能插队?聊聊NVIC优先级

[复制链接]
发表于 昨天 06:43 | 显示全部楼层 |阅读模式
⚡ 程序正在跑串口接收,定时器中断突然来了——谁让谁?答案藏在 STM32 的 NVIC 里。
🔍 抢占优先级 vs 子优先级
Cortex-M 的中断优先级分两层:抢占优先级决定"能不能打断别人",子优先级只决定"同时挂起时谁先响应",不能互相打断。
  • ✔ 抢占优先级数字越小,级别越高,0 是最高优先级
  • ✔ 高抢占优先级可以打断低抢占优先级的中断,形成中断嵌套
  • ❌ 相同抢占优先级之间永远不会互相打断,哪怕子优先级再高

💡 分组是怎么回事
NVIC 把 4 位优先级寄存器按组拆分:比如组 2 就是 2 位抢占+2 位子优先级。分组一改,原来设好的优先级含义全变,所以工程里通常整个项目统一一个分组,初始化一次就不再动。


一句话总结:抢占优先级管"插队",子优先级只管"排队",数字越小越横。

🛠 实战经验
耗时长的中断(比如协议解析)优先级放低,硬实时信号(比如 PWM 保护、编码器捕获)放最高,否则系统会出现莫名其妙的抖动和丢数据。
💬 互动一下
你在中断里踩过什么坑?是在中断里做太多事导致丢数据,还是优先级配反了?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号
免责声明|Archiver|手机版|小黑屋|半导贴吧

相关侵权、举报、投诉及建议等,请发 E-mail:1152577621@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|渝ICP备2024033348号|渝ICP备2024033348号-1

在本版发帖
关注公众号
QQ客服返回顶部