本帖最后由 always-2029922 于 2019-1-24 18:02 编辑 使用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优先级确实无法被抢占,具有最高优先级(因为先触发有限级为0的中断后,优先级为1的没能抢占) 2)0优先级无法抢占其他优先级,无法形成中断嵌套。(因为先触发非0优先级的中断后,0优先级没有抢占到) 疑问: 优先级为0的中断不具备抢占能力吗? 注:下图是我使用0优先级以上实现了抢占的波形图: 紫色优先级3,蓝色2,黄色1,三个中断执行同样的任务,黄色最先执行完毕,证明可以实现抢占。 设置紫色优先级3,蓝色2,黄色0后,发现黄色未能抢占,如图: 希望各位帮忙解答! 祝好! |
评分
查看全部评分