在RTOS中,信号量超时等待与直接任务通知在ISR中触发的性能差异主要源于机制复杂度。信号量(如FreeRTOS的xSemaphoreGiveFromISR)需要维护等待队列、优先级继承和内核调度状态,即使无阻塞,也涉及链表操作和临界区保护,开销约几十微秒(取决于时钟频率)。而任务通知(xTaskNotifyFromISR)直接操作目标任务的TCB字段,无队列管理,通常仅需几条指令,开销可低至几微秒。实测建议:用逻辑分析仪或DWT计数器测量ISR入口到任务唤醒的延迟,在Cortex-M4 @168MHz下,信号量约需15-25us,通知约5-8us(含上下文切换)。实操上,若ISR仅需唤醒单一任务且无需计数或互斥,优先用任务通知;若需多任务同步或超时语义,则用信号量。注意:任务通知的ulTaskNotifyTake支持超时,但ISR中只能触发,超时需在任务侧处理。优化时,关闭中断保护(如portSET_INTERRUPT_MASK)可减少开销,但需评估实时性风险。
mcuku 阿沐 · 2026-08-27