简介:在读取存储数据时,使用循环缓冲区完成对数据的写入和读取(本质上还是队列,是个循环闭环)
数据结构定义如下
/**
*@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;
}
写循环缓冲区