在FreeRTOS中,临界区通过关闭可管理的中断来保护共享资源,具体关闭的中断层级由configMAX_SYSCALL_INTERRUPT_PRIORITY
宏定义决定。以下是关键点解析:
-
中断优先级分类:
- 高优先级中断:数值低于
configMAX_SYSCALL_INTERRUPT_PRIORITY
的中断(如ARM Cortex-M中优先级数值越小,优先级越高)。这些中断不会被关闭,确保实时性要求高的任务(如硬件紧急事件)能立即响应。 - 可屏蔽中断:优先级等于或高于
configMAX_SYSCALL_INTERRUPT_PRIORITY
数值的中断(即优先级较低)。在进入临界区时,这些中断会被临时关闭,防止它们访问共享资源或调用FreeRTOS API导致竞态条件。
- 高优先级中断:数值低于
-
临界区实现机制:
- 使用处理器特定的方式(如ARM Cortex-M的
BASEPRI
寄存器)屏蔽中断,仅影响低于或等于指定优先级的中断。 - 高优先级中断仍可触发,但需遵循设计约束:不得调用FreeRTOS API,以避免在临界区或调度器挂起时引发不稳定。
- 使用处理器特定的方式(如ARM Cortex-M的
-
配置与注意事项:
- 正确设置宏:根据硬件中断优先级架构配置
configMAX_SYSCALL_INTERRUPT_PRIORITY
,确保需要实时响应的中断处于不可屏蔽范围。 - API调用限制:高优先级中断服务程序(ISR)应避免使用FreeRTOS功能(如队列、信号量),防止在中断上下文中引发阻塞或资源冲突。
- 正确设置宏:根据硬件中断优先级架构配置
总结:FreeRTOS临界区关闭的是优先级较低(数值较大)的中断,而高优先级中断保持开启。这种分层中断管理平衡了系统实时性与资源保护的需求,开发者需合理配置并遵守中断设计规范。