精华总结:
中断优先级0为最高,任务优先级0为最低
中断优先级分组中为方便rtos管理4bit全部设置成抢占优先级
32单片机的中断管理是由3个寄存器完成(名字忽略,具体功能忽略),三个寄存器都是32bit,通过移位可操作设置寄存器上的bit位,比如可设置pendsv中断和systick中断优先级
最终,pendsv与systick被设置成15,pendsv与systick切换任务的时候不会影响到其它中断的触发(比如外部中断)
上面三个寄存器是设置中断优先级;还有三个寄存器用于屏蔽中断,freertos使用了寄存器BASEPRI用于中断屏蔽,为0x50代表关闭(也可以说屏蔽)5-15优先级的中断,为0代表不关闭(屏蔽)任何中断(就是这个寄存器规定了freertos只能控制5-15优先级的中断),如果为0x60,则就是6-15
1、中断优先级分组全部设置成抢占优先级->是为了方便freertos管理中断
即:HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
2、你的中断优先级设置必须是5-15(当然也可以为0-4,但这样不受控了)
3、freertos只能控制5-15优先级的中断
4、0-4的中断因为rtos不可控,所以禁止0-4的中断调用rtos的api函数,因此设置抢占优先级必须≥5才行,如果你设置成了4则rtos控制不了则无法控制别人抢占你或者你抢占别人
什么是中断?
简介:让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断
例: