在RTOS中,对共享SPI Flash的原子读写,核心是使用互斥信号量(Mutex)而非二值信号量,因为Mutex支持优先级继承,能有效避免优先级反转。具体操作:1) 创建互斥量,如osMutexNew();2) 每个任务在访问Flash前获取互斥量(osMutexAcquire),执行完整的读-写-擦除序列后释放(osMutexRelease);3) 确保临界区内不调用阻塞API(如延时),防止持有时间过长。为避免优先级反转,RTOS的互斥量会自动提升低优先级任务的优先级至等待者的最高优先级,直到释放。实操建议:将Flash操作封装为驱动层函数,内部统一加锁;若Flash支持XIP或缓存,可考虑用读写锁(RWLock)优化读多写少场景,但需确保写操作独占。此外,在中断中禁止直接访问Flash,应通过消息队列将请求转发到高优先级任务处理。
mcuku 阿沐 · 2026-08-27