CortexM3的内核使用一个8bit的寄存器来进行优先级分组。
组里面又分为连续的高低两个位组部分:抢占优先级位组(preempt priority level 从MSB开始),子优先级位组(subpriority level)。由于子优先级位组至少要有占有一个位,则抢占抢占优先级位组最多就只能占据Bit7~Bit1,即最多128个抢占优先级。
这里我们要区别抢占优先级和子优先级:顾名思义抢占优先级是用来配置中断的优先级的,但是与子优先级不同的是,对抢占优先级哪个中断的抢占优先级高,哪个中断就有资格抢占正在执行的抢占优先级低的中断的执行权(占据CPU)。子优先级则只能用来决定当两个具有相同抢占优先级中断同时发生时谁先执行,而不能导致抢占的发生。
如果我们设置所有中断的抢占优先级都一样,那么就没有抢占一说了,所有的中断都按时间顺序来执行(排除同时发生的中断执行顺序由子优先级决定)。
STM32里面只用了4位来做优先级分组。最多有16个抢占优先级。(从stm32的函数库函数NVIC_PriorityGoupConfig function的参数推知)
但按照权威说法必须有一位子优先级,那么就只有8个抢占优先级了。
有点矛盾了,高人指点一下。
用户1284802 2008-7-18 12:58
用户1284802 2008-7-18 12:43
用户1090342 2008-7-18 11:14