文章目录

  • 前言
  • 一、什么是环形缓冲区?
  • 二、为什么要使用环形缓冲区及环形缓冲区实用场景
  • 三、环形缓冲区原理及代码的编写
    • 原理
    • 代码编写
  • 总结

前言

本篇文章将为大家介绍一下什么是环形缓冲区,在很多场合都可以使用环形缓冲区,他既可以进行数据的写入也可以进行数据的读取,使用环形缓冲区可以减小数据丢失的风险,更加保证了数据的安全性和有效性。

一、什么是环形缓冲区?

在通信程序中,经常使用环形缓冲器作为数据结构来存放通信中发送和接收的数据。环形缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。

二、为什么要使用环形缓冲区及环形缓冲区实用场景

环形缓冲区说白了就是一个数组,这个数组里面能存储非常多的数据。使用环形缓冲区可以帮助我们保证数据的安全及数据的可靠性。
环形缓冲区可以用于各种信息的存放。

1.多次按下按键
有的设备性能不是很好,在多次操作按键后,可能就只有少数几次按键是有效的,因为设备无法快速读取这些按键值并且进行处理,我们可以将按键的数据一个个的存放进环形缓冲区,处理时再去一个个的取出这些就可以保证数据不会被丢失。

三、环形缓冲区原理及代码的编写

原理

环形缓冲区就是一个很大的数组,我们给他分配一个读指针和一个写指针。

当写入数据时W指向下一个数组的地址,R不变。
同样的道理当读取数据时R加加,W不变。

环形缓冲区为空的条件,W和R同时等于0。
环形缓冲区为满的条件,W+1等于环形缓冲区的大小。

代码编写

/*BUF_SIZE就是一个宏大小一般定义为128*/
static int Buf[BUF_SIZE]={0}; //缓冲区
static int W=0; //写指针
static int R=0; //读指针/*环形缓冲区初始化*/
void Buff_Init(void)
{Buff_Clear();
}/*写数据*/
void Buff_Write(int data)
{if((W+1)%BUF_SIZE!=R) //队列未满{Buf[W]=data;W=(W+1)%BUF_SIZE;}
}/*读数据*/
int Buff_Read(void)
{int data=0;if(R!=W) //队列非空{data=Buf[R];R=(R+1)%BUF_SIZE;}return data;
}/*环形缓冲区清0*/
void Buff_Clear(void)
{W=0;R=0;
}

总结

环形缓冲区在嵌入式开发中会经常使用到,我希望大家能够将这个知识点牢记于心。

C语言实现环形缓冲区相关推荐

  1. C语言构建环形缓冲区

    它逻辑上是一个首尾相连的FIFO结构,具体实现上采用简单的线性数组.通过额外的辅助标志(head.tail)能很快知道队列的使用情况(是满还是为空).正因为其简单高效的原因,甚至在硬件都实现了环形队列 ...

  2. 环形缓冲区实现(C语言)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 要求 一.环形缓冲区 二.环形缓冲区实现(C语言) 1. ringBuf.h 2. ringBufInit.c 3. rin ...

  3. c语言数组怎么环形阵列,C语言 用于大阵列的无复制线程安全环形缓冲区

    对于大数组(10 ^ 7个元素)上的信号处理,我使用与环形缓冲区连接的不同线程.遗憾的是,只需要太多时间将数据复制到缓冲区和从缓冲区复制数据.当前实现基于boost :: lockfree :: sp ...

  4. 音视频环形缓冲区C语言实现

    目录 一.什么是环形缓冲区 二.为什么使用环形缓冲区 三.代码实现 一.什么是环形缓冲区 环形缓冲区(也称为循环缓冲区)是固定大小的缓冲区,工作原理就像内存是连续的且可循环的一样.在生成和使用内存时, ...

  5. 环形缓冲区C语言实现

    环形缓冲区 环形缓冲区的特性 1.先进新出 2.当缓冲区被使用完,且又有新的数据需要存储时,丢掉历史最久的数据,保存最新数据 现实中的存储介质都是线性的,因此我们需要做一下处理,才能在功能上实现环形缓 ...

  6. c语言数组实现环形缓冲区,[嵌入式开发模块]环形缓冲区/循环队列 C语言实现

    忙着毕设,很久没有写文章了,终于答辩完了,得了个校优秀毕业设计.毕设做的是个智能接口模块,用一周时间入门了,MC9S12XEP100的开发,又用一周时间入门了uC/OS-II嵌入式操作系统,在做毕设的 ...

  7. 架构设计:生产者/消费者模式 第6页:环形缓冲区的实现

    2019独角兽企业重金招聘Python工程师标准>>> ◇判断"空"和"满" 上述的操作并不复杂,不过有一个小小的麻烦:空环和满环的时候,R和 ...

  8. 优雅地用宏实现环形缓冲区

    之前写的环行缓冲区文章 柔性数组和环形队列之间的故事 C语言,环形队列 循环缓冲区是嵌入式软件工程师在日常开发过程中的关键组件. 多年来,互联网上出现了许多不同的循环缓冲区实现和示例.我非常喜欢这个模 ...

  9. Ring Buffer (circular Buffer)环形缓冲区简介

    https://blog.csdn.net/langeldep/article/details/8888582 关于环形缓冲区的知识,请看这里 http://en.wikipedia.org/wiki ...

最新文章

  1. ios html cookies,iOS-WKWebView携带cookie发送http请求,cookie失效
  2. Unity3d XmlException: Text node cannot appear in this state的方案
  3. JAVA的彻底删除重下
  4. ReactiveCocoa中潜在的内存泄漏及解决方案
  5. 利用连接对象增删改数据 jdbc 20210409235645323
  6. 提供oracle兼容特性报,【干货】K-DB为什么能全面兼容Oracle
  7. Golang教程:(十五)指针
  8. led led c语言程序设计,单片机C语言程序设计:8X8LED 点阵显示数字
  9. Xshell7,Xftp7免费版下载安装
  10. 禁忌搜索算法c语言代码,禁忌搜索算法CC++源代码.doc
  11. Unity 面试经验汇总
  12. ISO/IEC27000系列标准研究
  13. 英语演讲计算机ppt模板,英语ppt演讲稿
  14. 有监督学习与无监督学习的区别
  15. Vue+Element 表格打印
  16. 关于c#实现影音嗅探的问题(转)
  17. 【Android开发笔记】4.简单基站定位程序
  18. Kafka的运维利器-AdminClient
  19. 自定义 View 之 QQ 个人主页视差动画效果
  20. 学习编程可以从事哪些行业

热门文章

  1. 整理一下 System.Linq.Enumerable 类中的那些比较少用的方法
  2. 随机快速排序算法(C语言)
  3. 快手小铃铛主页可以点击跳转到微信吗?主图怎么设置?
  4. 长春8中2021年高考 成绩查询,长春八中刷新数据,高考成绩再创新高!
  5. 图片怎么压缩到200k以内?图片压缩怎么指定大小?
  6. C语言strcmp()函数
  7. 深度学习五大神经网络 1
  8. 提升工作效率-Trello
  9. web前端基础 html5+css3(十.html5css3新特性)
  10. linux 查找安装包路径,查看yum安装软件包的路径