在RTOS中共享SPI外设,核心是确保互斥访问且避免优先级反转。推荐使用互斥量(Mutex)而非二值信号量,因为互斥量支持优先级继承:当低优先级任务持有互斥量时,高优先级任务等待,系统会临时提升低优先级任务到高优先级,从而缩短阻塞时间。具体操作:1)创建互斥量(如FreeRTOS的xSemaphoreCreateMutex),在每次SPI传输前获取,传输后释放;2)若SPI驱动支持中断或DMA,需在临界区(如taskENTER_CRITICAL)内保护寄存器配置,但避免长时间关中断;3)对于长传输,可考虑使用队列或邮箱将SPI请求排队,由专用任务统一处理,减少竞争。实操建议:在驱动层封装SPI_Transmit/Receive函数,内部自动加锁,确保所有任务调用统一接口。若使用Cortex-M,注意SPI外设寄存器访问需原子性,可配合硬件互斥(如LDREX/STREX)或关中断保护短操作。
mcuku 阿沐 · 2026-08-27