C语言实现环形缓冲区

简介: C语言实现环形缓冲区

前言

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


一、什么是环形缓冲区?

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


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

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

环形缓冲区可以用于各种信息的存放。


1.多次按下按键

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


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

原理

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

1a9d6846796543c29b31523f2046e2a0.png

当写入数据时W指向下一个数组的地址,R不变。

同样的道理当读取数据时R加加,W不变。

7083f694a53a4158ab756db0a947816b.png


环形缓冲区为空的条件,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;
}

总结

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

相关文章
|
6天前
|
存储 Unix 编译器
【C语言小知识】缓冲区
【C语言小知识】缓冲区
|
3月前
|
存储 C语言 C++
C语言进阶⑲(文件下篇)(文件读写+文本文件和二进制文件+EOF+文件缓冲区)(下)
C语言进阶⑲(文件下篇)(文件读写+文本文件和二进制文件+EOF+文件缓冲区)
37 0
|
3月前
|
存储 C语言 C++
C语言进阶⑲(文件下篇)(文件读写+文本文件和二进制文件+EOF+文件缓冲区)(上)
C语言进阶⑲(文件下篇)(文件读写+文本文件和二进制文件+EOF+文件缓冲区)
39 0
|
存储 缓存 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(下)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(下)
|
9月前
|
编译器 C语言
【C语言航路外传】输入输出函数及输入缓冲区的那点事
【C语言航路外传】输入输出函数及输入缓冲区的那点事
37 0
|
存储 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(中)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(中)
|
编译器 数据库 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(上)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(上)
|
存储 缓存 算法
【C语言拓展】缓冲区、结构体大小计算、命令行参数
【C语言拓展】缓冲区、结构体大小计算、命令行参数
141 0
|
机器人 Linux C语言
C语言, C++ IO 总结. 一篇文章帮你透析缓冲区存在的意义, C, C++ IO的常见用法
C语言, C++ IO 总结. 一篇文章帮你透析缓冲区存在的意义, C, C++ IO的常见用法
C语言, C++ IO 总结. 一篇文章帮你透析缓冲区存在的意义, C, C++ IO的常见用法
|
C语言
C语言——getchar()函数缓冲区
C语言——getchar()函数缓冲区
216 0
C语言——getchar()函数缓冲区