在 FreeRTOS 中,**临界区(Critical Section)**是一段特殊的代码区域,在这段代码执行期间,系统会暂时屏蔽中断或禁止任务调度,以确保代码的原子性(即不会被其他任务或中断打断)。临界区的主要作用是保护共享资源,防止数据竞争和不一致。
1. 临界区的概念
1.1 定义
临界区是通过暂时屏蔽中断或禁止任务调度来保护共享资源的一段代码。在 FreeRTOS 中,临界区通常通过以下两个函数实现:
-
taskENTER_CRITICAL()
:进入临界区,屏蔽中断或提升任务优先级。 -
taskEXIT_CRITICAL()
:退出临界区,恢复中断或任务调度。
1.2 实现原理
-
屏蔽中断:
在进入临界区时,FreeRTOS 会暂时屏蔽所有可屏蔽的中断(通常是优先级低于某个阈值的中断)。 -
禁止任务调度:
在某些实现中,FreeRTOS 可能会暂时禁止任务调度,确保当前任务不会被其他任务抢占。
2. 什么时候开启和关闭临界区
2.1 开启临界区
在以下情况下需要开启临界区:
-
访问共享资源时:
当多个任务或任