FIFO是模拟双端口缓冲器而设计的,先进的数据先出,进出的数据可以是1个至n个不等,主要解决时序问题。就像排队买菜,先来的排在前面,后来的排后面,先来的先买菜。

1. 策略:排队需要缓冲区BUF队列,模仿“排队买菜”和“双端口器件”原理,维持BUF队列中第一个数据永远在第一个存储位。

2. 读出:一个或n个,从第一个存储位开始读,读完后将剩余数据提到最前端,第一个数据对齐第一个存储位。

3. 写入:从队列后加入。

头文件:

#ifndef FIFOH
#define FIFOH#include <windows.h>#define FifoMaxBufSize 200000UL //200KBclass CFIFO
{public:int iFifoBufSize;//当前缓冲区数void Reset(void);//复位数据bool Read(BYTE *pData, int iReadSize);//读出bool Write(BYTE *pData, int iWriteSize);//写入private:BYTE Buf[FifoMaxBufSize];//缓冲区队列
};#endif

源文件:

#include "FIFO.h"void CFIFO::Reset(void)//复位数据
{iFifoBufSize = 0;//复位当前缓冲区数
}bool CFIFO::Read(BYTE *pData, int iReadSize)//读出
{if(iReadSize > iFifoBufSize) return false;//要求不能满足memcpy(pData, Buf, iReadSize);//考出iFifoBufSize -= iReadSize;//减去移走数据if (iReadSize > 0)//有数据需要移动{memcpy(&Buf[0], &Buf[iReadSize], iFifoBufSize);//移动缓冲区剩余数据至顶部}return true;
}bool CFIFO::Write(BYTE *pData, int iWriteSize)//写入
{if ((iFifoBufSize + iWriteSize) > FifoMaxBufSize) return false;//要求不能满足memcpy(&Buf[iFifoBufSize], pData, iWriteSize);//从队尾处写入iFifoBufSize += iWriteSize;//加入写入量return true;
}

在读取FFmpeg解压后音频片数据获得成功,其他应用可调整最大队列量,确保不溢出。  

  

转载于:https://www.cnblogs.com/hbg200/p/10599312.html

一种FIFO实现原理相关推荐

  1. 异步FIFO的原理以及可综合的Verilog代码

    异步FIFO的原理以及可综合的Verilog代码 一.FIFO的定义 二.FIFO的应用场景 三.FIFO的分类 FIFO的参数 FIFO的设计难点 一.FIFO的定义 _ First In Firs ...

  2. FIFO(二):FIFO工作原理

    FIFO工作原理 根据FIFO工作的时钟域分为同步/异步FIFO.同步FIFO是指读时钟和写时钟为同一个时钟在时钟沿来临时同时发生读写.异步FIFO读写时钟不一致,读写相互独立. 1.读写指针的工作原 ...

  3. FIFO工作原理以及读写完成标识和判断方法

    FIFO工作原理 根据FIFO工作的时钟域分为同步/异步FIFO.同步FIFO是指读时钟和写时钟为同一个时钟在时钟沿来临时同时发生读写.异步FIFO读写时钟不一致,读写相互独立. 1.读写指针的工作原 ...

  4. 缓存淘汰策略:LRU、LFU、FIFO 算法原理

    通常来说,Redis 一共有 6 种缓存淘汰策略,其中,常用的 allkeys-lru 和 volatile-lru 里面都提到了 LRU 的概念,实际上 LRU 就是缓存淘汰策略的基础算法.现在,就 ...

  5. 动图|帮你一次性搞清楚 40种传感器工作原理

    来源:一览众车/东方仿真 物联网智库 转载 摘要:帮你一次性搞清楚 40种传感器工作原理 扩散硅式压力传感器 应变加速度感应器 压阻式传感器测量液位的工作原理 MQN型气敏电阻结构及测量电路 气泡式水 ...

  6. 网卡设置 多网卡的7种bond模式原理

    多网卡的7种bond模式原理 Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0 ...

  7. 徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么?

    徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么? 完成:第一遍 1.数据库并发控制通过什么实现? 当多个事务并发方法对同一个数据进行操作 通过数据库锁实现对数据库的并发控制. 2.锁类 ...

  8. 【转载】多网卡的7种bond模式原理

    多网卡的7种bond模式原理 Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0 ...

  9. 吃透Chisel语言.38.Chisel实战之以FIFO为例(三)——几种FIFO的变体的Chisel实现

    Chisel实战之以FIFO为例(三)--几种FIFO的变体的Chisel实现 上一篇文章对实现串口通信的最小系统做了简单阐述,然后从发送端开始,实现了基于单字节FIFO缓冲区的发送端,接着类似地实现 ...

  10. LVS三种工作模式原理

    1. LVS 三种工作模式原理 1.1 LVS-DR: 通过直接路由实现虚拟服务器(VS/DR) 跟VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请 ...

最新文章

  1. 学习SQLite之路(五) C/C++ SQLite开发实例
  2. MySQL编程(0) - Mysql中文乱码问题解决方案
  3. Sublime Text 3 全套快捷键及功能介绍
  4. 2022-02-21
  5. html5 悬停边框,Html,css:在悬停时更改行的边框颜色(Html,css: Change a row's border colow on hover)...
  6. Kafka解惑之Old Producer(3)——Async Analysis
  7. 一些PHP性能优化汇总
  8. Pandas数据结构简介
  9. pandas基础操作
  10. 递归 尾递归_递归,递归,递归
  11. Spring之数据源整理
  12. OpenShift 4 - CRC(Codeready Container)个人单机版 OpenShift 环境
  13. SPSS统计分析专题系列(一、认识SPSS)
  14. 1563页Go语言中文文档,涵盖Go语言所有核心知识点
  15. JarvisOJ 逆向Writeup
  16. 云计算笔记之admin-day-05-管理用户和组、tar备份与恢复、NTP时间同步、cron计划任务、总结和答疑
  17. Linux的内核态与用户态
  18. uni-app开发小程序,笔记记录6 商品详情页
  19. 华为云存储空间图库占比太大_管理云存储空间
  20. 科学计算器在线使用(转)

热门文章

  1. Maven项目打包成可执行Jar文件
  2. Effective_STL 学习笔记(三) 使容器里对象的拷贝操作轻量而正确
  3. 1051: 平方根的和
  4. 初探HTML5.x新特性《dialog》标签
  5. POM (Project Object Model)简介
  6. OSI参考模型及其数据封装和解封装介绍
  7. 编程疑难杂症の真的非常一样的文本?!
  8. UVA - 10820欧拉函数的应用
  9. Unity3D播放背景音乐
  10. 函数自执行-一元运算符