C语言实现环形缓冲区


前言

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

一、什么是环形缓冲区?

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

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

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

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;
}


总结

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花落已飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值