在嵌入式开发中,很多问题表面上是“数据处理不过来”,本质上却是数据生产速度与数据消费速度不匹配。
例如:
- UART 中断不断接收数据,而主循环还来不及解析;
- DMA 突然完成一批数据传输,需要等待后续任务处理;
- 传感器持续采样,而算法模块只能周期性读取;
- 通信协议存在突发报文,短时间内数据量远大于平均处理能力;
- 为了降低 CPU 中断和任务调度开销,希望积累一定数据后再批量处理。
这类问题,如果没有合适的缓冲机制,就很容易出现:
数据覆盖、数据丢失、处理顺序错乱,甚至系统状态异常。
而解决这类问题最基础、也最常用的结构之一,就是 FIFO——先进先出缓冲区。
但真正把 FIFO 用好,并不只是定义一个数组,再加两个读写指针那么简单。
一个可靠的嵌入式 FIFO 模块,还涉及:
- 缓冲区为什么需要设计成环形;
- 读写指针如何回绕;
- 如何准确区分“空”和“满”;
- 为什么很多实现会故意浪费一个存储单元;
- 如何计算当前数据量;
- 如何封装成可复用模块;
- 中断和任务同时访问时又该如何保证安全。
一、FIFO 到底解决了什么问题?
FIFO,即 First In First Ou
网硕互联帮助中心


评论前必须登录!
注册