在RTOS中,信号量超时等待(如xSemaphoreTake)和任务通知(如xTaskNotifyGive)在ISR中的性能差异显著。实测表明,任务通知在ISR中更快,因为其核心操作是直接修改任务控制块(TCB)中的通知值,无需经过内核调度器的队列管理,且避免了信号量内部的链表操作和优先级继承机制。具体数据:在Cortex-M4 @168MHz下,xTaskNotifyGiveFromISR约耗时1-2μs,而xSemaphoreGiveFromISR约3-5μs,若涉及超时等待(xSemaphoreTake)则额外增加上下文切换开销。实操建议:对于高频ISR(如ADC采样),优先使用任务通知替代信号量,可减少中断延迟;但需注意任务通知仅支持单任务等待,若需多任务同步则仍用信号量。测试时建议关闭调度器锁,使用硬件定时器精确测量,并多次取平均以消除抖动。
mcuku 阿沐 · 2026-08-27