在RTOS中,信号量超时等待可避免永久阻塞,但无法解决优先级反转。设计无死锁的共享外设驱动,核心是使用互斥量(Mutex)而非二值信号量,并启用优先级继承(Priority Inheritance)。具体实操:1)创建互斥量时,配置优先级继承属性(如FreeRTOS的mutex默认支持,或使用pthread_mutexattr_setprotocol设为PTHREAD_PRIO_INHERIT);2)驱动内所有共享外设访问(如UART、SPI)统一通过该互斥量保护,避免嵌套锁;3)超时等待设为合理值(如10ms),超时后返回错误并重试或放弃,防止死锁;4)若外设操作需分步(如写寄存器+等待中断),使用条件变量或事件组配合互斥量,避免持锁等待。优先级继承确保低优先级任务持锁时,高优先级任务等待能临时提升低优先级任务优先级,消除反转。建议在驱动接口层封装锁获取/释放,并加入断言检查锁状态,便于调试。
mcuku 阿沐 · 2026-08-27