在RTOS中,信号量(通常指二值或计数信号量)适合任务间同步或短临界区保护,但若用于保护共享资源且涉及中断嵌套,优先级反转风险显著。实测中,信号量超时等待(如xSemaphoreTake(pdMS_TO_TICKS(100)))在低优先级任务持锁时,高优先级任务会阻塞,若中断嵌套抢占低优先级任务,反转时间可能超过超时值,导致高优先级任务超时失败。此时应改用互斥锁(如xSemaphoreCreateMutex),它内置优先级继承机制:当高优先级任务等待时,低优先级任务临时提升到高优先级,缩短反转窗口。实操建议:1) 若临界区操作短(<10us)且无阻塞,用信号量+关中断;2) 若临界区涉及I/O或长操作,且任务优先级差异大,必须用互斥锁;3) 实测对比时,记录中断嵌套频率和最大阻塞时间,若超时触发次数>0.1%或阻塞时间>超时值50%,立即切换互斥锁。注意:互斥锁不能在中断服务例程中使用,需通过队列或任务通知替代。
mcuku 阿沐 · 2026-08-27