核心是给SPI总线加互斥量并避免在持锁期间阻塞。用SemaphoreHandle_t spiMutex = xSemaphoreCreateMutex(),所有访问SPI的代码(包括loopTask和自定义任务)统一走spiLock()/spiUnlock()封装,临界区内只做SPI传输,不做delay、不等待队列、不打印串口。优先级反转方面:FreeRTOS互斥量自带优先级继承,能缓解但不能根治;更稳妥的是把SPI访问集中到单一高优先级SPI服务任务,其他任务通过队列提交请求,彻底消除多任务争锁。若必须多任务直接访问,确保持锁时间短(单次传输<1ms),并让loopTask与SPI任务优先级接近,避免低优先级任务长期持锁。另注意Arduino的SPI.begin()要在创建任务前调用,且不要在中断里拿互斥量。