参考资料:《正点原子STM32F4 FreeRTOS开发手册_V1.1》《野火FreeRTOS 内核实现与应用开发实战—基于STM32》
Cortex-M中断
Cortex-M4内核提供了一个NVIC,这个NVIC在STM32里面是由四个bit组成的,可以配置成5种不同的中断分组,即不同的抢占优先级和亚优先级,在移植FreeRTOS的时候要求4bit全部设置成抢占优先级
FreeRTOS的中断
其实FreeRTOS本身并没有中断,FreeRTOS的中断是依赖于MCU内核的中断的,在STM32中也就是Cortex-M的中断。
FreeRTOS会利用Cortex-M的中断分组,但是会设置一个“免打扰”模式。在上文中我们提到,如果要是用FreeRTOS的话我们是把中断的4bit全用在了抢占优先级,也就是2^4=16个中断优先级(0~15级)。而“免打扰模式”就是设置高位的几个优先级,这个中断是不会被关闭的,而低位的优先级是会被全部被关闭的
设置这个打断的就是粉色下划线的部分,图中设置的是5,那么0 ~ 4优先级的是不会被关闭的,而5 ~ 15优先级的中断是可以被FreeRTOS关闭的,即使满足了中断触发条件也是不会触发中断的,所以如果是处理一些不能被普通中断打断的事务的时候,可以选择把中断关闭,然后再处理。
FreeRTOS中这个函数portDISABLE_INTERRUPTSO();
是用来关闭中断的 这个函数portENABLE_INTERRUPTSO;
是用来开中断的