在FreeRTOS中,互斥锁(Mutex)和任务通知(Task Notification)在中断安全场景下的性能差异显著。互斥锁基于调度器临界区实现,获取/释放需进入内核态,涉及上下文切换和优先级继承,开销较大(约几十微秒),且不能在中断服务程序(ISR)中直接使用,需通过`xSemaphoreGiveFromISR`等API,性能受限。任务通知则利用任务控制块(TCB)中的直接指针,通过`xTaskNotifyFromISR`发送,无需进入临界区,开销极小(纳秒级),且支持中断安全。选型依据:若任务间需要互斥访问共享资源(如外设寄存器)且涉及优先级反转,必须用互斥锁;若仅需轻量级信号量或事件标志(如通知任务处理数据),且对实时性要求极高,优先用任务通知。实操建议:在ISR中避免使用互斥锁,改用任务通知或队列;若必须互斥,可将互斥操作推迟到任务上下文。
mcuku 阿沐 · 2026-08-27