stm32中抢占优先级相同的话,子优先级可以相同吗

一、抢占优先级和响应优先级
STM32 的Φ断向量具有两个属性一个为抢占属性,另一个为响应属性其属性编号越小,表明它的优先级别越高
抢占,是指打断其他中断的属性即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A)搶占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。
而响应属性则应用在抢占属性相同的情况下当两个中断向量的抢占优先级相同时,如果两个中断同时到达 则先处理响应优先级高的中断, 响应属性由NVIC_IRQChannelSubPriority 参数配置例如,现在有三个中断向量如下表。
若内核正在执行C 的中断服务函数则它能被抢占优先级更高的中断A 打断,由于B和C 的抢占优先级相同所以C 不能被B 打断。但如果B 和C 中断是同时到达的内核就会首先响应响应优先级别更高的B 中断。

二、NVIC 的优先级组
Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级最低3位用于指定响 应优先级
第2組:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级最低1位用于指定响应优先级
第四组:所有4位用于指定抢占式优先级

M3用8bitsSTM32用高四位来表示抢占和子优先级:bit=1表示抢占bit=0表示非抢占即子优先级;所以共有5中方案分组:
第0组 0   0    0   0
第1组 1   0    0   0
第2组 1   1    0   0 抢占共有22=4(0~3);子优先级22=4(0~3),共44=16级嵌套
第3组 1   1    1   0  抢占共有23=4(0~7);子优先级21=2(0~1)共8
2=16级嵌套
第4组 1   1    1   1
到底谁优先:数字越小优先级越高,抢占级数字小的可剥夺抢占级数芓大的
1抢占相同子优先级不同:此时没有抢占剥夺,此时按照子优先级顺序排序
2抢占和子优先级都相同但有先后:此时无抢占剥夺依照FIFO,前一个执行完了才能执行后者;
3抢占和子优先级都相同且同时到达:此时按照中断向量表顺序排先后

每写一个关于中断优先级的程序必须包含下列两个函数:

默认情况下如何不设置中断优先级分组,则中断优先级分组默认为0即0位抢占优先级,4位响应优先级则无任何搶占优先级,所以无论中断的优先级设多少都没有抢占中断的功能,所以如果想要一个中断打断另一个中断,必须设置中断优先级分組为1,2,34.

在上例子中,优先抢占优先级其数字越低,优先级越高相同下比较响应优先级,其数字越低优先级越高

**Tips:**代码中抢占优先级0,1等,响应优先级(子优先级)0,13等,都是由自己设置的但是必须在抢占优先级或者响应优先级设定的范围内。

我要回帖

 

随机推荐