求助:stm32F4 中断优先级0无法抢占的问题

2019-07-20 03:59发布

本帖最后由 751023618 于 2019-1-27 17:47 编辑

使用F407遇到一个抢占优先级的问题:
现设置优先级分组 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);也就是15个优先级分组。按照手册说明0抢占优先级具有最高优先级别。
现在我使用两个定时器:
        1)TIM2设置优先级为0,TIM4设置优先级为1
        2)若先启动TIM4,延时一下再启动TIM2(为了先触发定时器4中断),现象为:TIM2无法抢占。
        3)若先启动TIM2,则TIM4也无法抢占中断。

再次实验其他优先级:
        1)TIM2设置优先级为1,TIM4设置优先级为2
        2)若先启动TIM4,延时一下再启动TIM2(为了先触发定时器4中断),现象为:TIM2成功抢占。

再次实验:
        1)TIM2设置优先级为0,TIM4设置优先级为15
        2)若先启动TIM4,延时一下再启动TIM2(为了先触发定时器4中断),现象为:TIM2无法抢占。
        
总结现象:
        1)实验现象证明0优先级确实无法被抢占
        2)0优先级无法抢占其他优先级,无法形成中断嵌套。
疑问:
        优先级为0的中断不具备抢占能力吗?

注:下图是我使用0优先级以上实现了抢占的波形图:
紫 {MOD}优先级3,蓝 {MOD}2,黄 {MOD}1,三个中断执行同样的任务,黄 {MOD}最先执行完毕,证明可以实现抢占,但是将黄 {MOD}设置为0则黄 {MOD}抢占失败。
tek00000.png

设置紫 {MOD}优先级3,蓝 {MOD}2,黄 {MOD}0后,发现黄 {MOD}未能抢占,如图:
tek00000.png


望各位帮忙解答,手册上未找到答案。
祝好!





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。