目录
1、优先级的定义
CM3 允许的最少使用位数为3 个位,亦即至少要支持8 级优先级。
例如:
STM32: 支持16级优先级
见《【野火_】零死角玩转STM32—F103指南者.pdf》 page148
S32K: 支持16级优先级
见《S32K1xx Series Reference Manual》 page116
2、优先级构成
按位分成高低两段,分别是抢占优先级和响应优先级
抢占优先级决定了抢占行为:当系统正在响应某异常L 时,如果来了抢占优先级更高的
异常H,则H 可以抢占L。
响应优先级则处理“内务”:当抢占优先级相同的异常有不止一个悬起时,就优先响应优先级最高的异常。
默认分组如下:优先级分组 在 SCB配置(系统控制块中优先级分组配置寄存器)
例子:
PS: 注意STM32 中的分组序号与Cortex 的分组序号不是同步的
序号 | STM32分组 | Cortex分组 | S32K 分组 | 备注(以16级优先级为例) |
0 | - | 0 | 0 | 16级抢断,0级响应 |
1 | - | 1 | 1 | 16级抢断,0级响应 |
2 | - | 2 | 2 | 16级抢断,0级响应 |
3 | 4 | 3 | 3 | 16级抢断,0级响应 |
4 | 3 | 4 | 4 | 8级抢断,2级响应 |
5 | 2 | 5 | 5 | 4级抢断,4级响应 |
6 | 1 | 6 | 6 | 2级抢断,8级响应 |
7 | 0 | 7 | 7 | 0级抢断,16级响应 |
注意:网上参考了【STM32】NVIC 中断优先级管理,没有理解清优先级分组 0,错误认为S32K 对应的 优先级分组0, 也是为没有抢断的,都为同一抢断优先级,不同响应优先级。