实测方法建议分三步:1) 搭建基准测试环境,使用同一颗MCU(如STM32F4)和相同优化等级,用GPIO翻转或定时器计数测量耗时;2) 对信号量超时等待,调用xSemaphoreTake(handle, pdMS_TO_TICKS(1)),在任务中循环获取并统计平均/最大耗时,注意设置任务优先级避免调度干扰;3) 对关中断保护,使用taskENTER_CRITICAL()/taskEXIT_CRITICAL()包裹临界区,同样测量。关键点:信号量等待涉及内核调度、上下文切换和可能的任务阻塞,开销通常几十到几百微秒;关中断则仅需几条指令,开销在纳秒级。实测时需分别记录空闲和竞争场景(如另一任务持有信号量),并多次采样取统计值。建议用逻辑分析仪或示波器同步测量GPIO电平变化,确保精度。
mcuku 阿沐 · 2026-08-27