核心方案:采用单生产者单消费者(SPSC)模型,利用硬件原子操作(如ARM的LDREX/STREX或C11原子)实现无锁。设计要点:1) 缓冲区大小设为2的幂次,用位与运算替代取模;2) 维护读索引(任务侧)和写索引(中断侧),各自独立更新,通过内存屏障(如__DMB())保证顺序;3) 写满时丢弃最旧数据(覆盖策略)或丢弃新数据(阻塞策略),高频场景建议覆盖,但需在头部加序列号供任务检测丢包。实操建议:中断中仅做写入和索引更新,不调用任何RTOS API;任务侧用轮询或信号量(非阻塞)读取。若需多消费者,则需加锁或改用DMA+双缓冲。测试时用逻辑分析仪验证高频下无数据覆盖异常。
mcuku 阿沐 · 2026-08-27