版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZenNaiHeQiao/article/details/82704245
目录
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
portDISABLE_INTERRUPTS(); 关中断 portENABLE_INTERRUPTS(); 开中断
taskENTER_CRITICAL() 和 taskEXIT_CRITICAL()
taskENTER_CRITICAL_FROM_ISR() 和 taskEXIT_CRITICAL_FROM_ISR()
(1)首先了解FreeRTOSConfig.h中的宏。
configKERNEL_INTERRUPT_PRIORITY
此宏是定义内核中断优先级的,决定了可以有多少个优先级。
configMAX_SYSCALL_INTERRUPT_PRIORITY
此宏是定义系统中断权限的。高于此中断优先级的中断,内核无法禁止.
举个例子:STM32 设置为16个优先级 ,0为最高,16为最低。配置为configKERNEL_INTERRUPT_PRIORITY=15,
configMAX_SYSCALL_INTERRUPT_PRIORITY=5.
则高级别的中断0-4,不会被内核屏蔽。
(2)FreeRTOS 开关中断
portDISABLE_INTERRUPTS(); 关中断
portENABLE_INTERRUPTS(); 开中断
低于configMAX_SYSCALL_INTERRUPT_PRIORITY=5 的中断会被屏蔽。高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断会继续进行。
(3)临界段保护
taskENTER_CRITICAL() 和 taskEXIT_CRITICAL()
任务级临界保护代码,一个进入临界段,一个退出临界段。
taskENTER_CRITICAL_FROM_ISR() 和 taskEXIT_CRITICAL_FROM_ISR()
中断级临界保护代码,一个进入临界段,一个退出临界段。