在 FreeRTOS 中,**临界区(Critical Section)和互斥量(Mutex)**都是用于保护共享资源的机制,但它们的实现方式、使用场景和优劣势有所不同。以下是它们的详细对比和分析。
1. 临界区(Critical Section)
1.1 定义
临界区是通过暂时屏蔽中断(或提升任务优先级)来保护共享资源的一段代码。在 FreeRTOS 中,临界区通常通过以下两个函数实现:
-
taskENTER_CRITICAL()
:进入临界区,屏蔽中断。 -
taskEXIT_CRITICAL()
:退出临界区,恢复中断。
1.2 使用场景
-
保护共享资源:
当多个任务或任务与中断共享资源时,临界区可以确保资源的独占访问。 -
短小精悍的操作:
适用于对共享资源的操作非常短小(如修改变量、更新标志位)的场景。
1.3 优势
-
简单高效:
临界区的实现直接屏蔽中断,避免了任务切换的开销,执行效率高。 -
原子性保证:
在临界区内,任务不会被中断打断,确保操作