如何做一个环形缓存区


前言

作为一个非科班的人员来说,第一次听到环形缓存区,觉得是一个很高大上的词汇,后来研究发下,其实现方法比较简单,但是其却解决了数据存取的大问题。下面就以非科班的角度来叙述一下环形缓存区(简称:环缓(嬛嬛))。


一、环缓是什么?

一开始我认为环形缓存区是一个“环”,其实不然,他就是一个存储区域,我们用指针(或者回环的策略)将其首位相连,形成一个貌似头和尾连接起来的环形区域。
如下图所示,当数据从区域0按顺序向下存储到区域7后,接下来会继续向区域0存数据。

环形缓存区

二、如何使其首尾相连

1.引入库

如上图一个8个字节的数组,INT data[8],read是代表数据读到数组的第几个数了,write是代表数据写入到数组的第几个数了。
我们数据写入是从data[0]开始,写到data[7],然后当写入第9个字节的数据时,写入data[0],继续向下写。在数据写入data[0]后,wirte指向下一个将要写入的空间data[1]。
读取数据也是如此。
读取数据和写入数据是相对独立的。
我们要保证数据不被新写入的数据覆盖掉,需要在被写入之前,把数据读出来。

2.结构体示例

代码如下(示例):

typedef struct			//环形缓存区结构体				
{  
 	INT8U  RxBuf[RX_BUF_SIZE];//接收缓存数组
	INT16U rx_write,rx_read;//接收读、写指针

} RxDataTypeDef;


总结

当然本文中的read和write还不能称之为指针,是数组的下标,但是一般数组是存储位置连续的,所以这个下标和指针效果一致。但是简单用起来没啥问题。若有问题,可以私信我,我很愿意和大家友好交流。(在写道本文这里,我想起,环形缓存区的进阶应该是链表吧,链表就是可能不连续的存储位置,用指针连接起来的。)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值