循环缓冲区结构用法和使用规则

简介:在读取存储数据时,使用循环缓冲区完成对数据的写入和读取(本质上还是队列,是个循环闭环)

数据结构定义如下

/**
 *@brief:循环缓冲区结构,该缓冲区只能一个生产者,一个消费者
 */
struct ring_buffer_t{
   
	uint8_t *buffer_ptr;//<当前缓冲区指针
	uint16_t buffer_size;//<缓冲区大小
	uint16_t rd_index;//<读取索引
	uint16_t wr_index;//<写入索引
	uint8_t buffer_status;//<缓冲区状态
}; 

初始化循环缓冲区

void ring_buffer_init(struct ring_buffer_t *rb,unsigned char *pool,unsigned short size)
{
   
	rb->rd_index = 0;
	rb->wr_index = 0;
	
	rb->buffer_ptr = pool;//<初始化内存池
	rb->buffer_size = size;//<初始化大小
	rb->buffer_status = 0;//<初始化缓冲区未满
}

返回循环缓冲区填充元素数

/**
 *@brief:返回缓冲区内的元素个数
 *@param:
 *	-#:循环缓冲区结构
 *@ret:
 	-#:缓冲区的元素个数
 */
int ring_buffer_count(struct ring_buffer_t *rb)
{
   
	if(rb->buffer_status == 1 && rb->rd_index == rb->wr_index){
   //<表示满了
		return rb->buffer_size;
	}
	if(rb->wr_index >= rb->rd_inx){
   
		return rb->wr_index - rb->rd_inx;
	}
	return rb->wr_index - rb->rd_index + rb->buffer_size;
}

写循环缓冲区

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值