本文实现了环形缓冲区,可以用在嵌入式上,拿来扫串口数据或者扫一些状态标志。环形缓冲区本质上就是一个队列,遵循FIFO先进先出。
基本的成员有:
typedef struct{
unsigned int head;//头指针,用来读
unsigned int tail;//尾指针,用来写
unsigned int lenth;//记录数据长度
unsigned char *data;//数组指针
unsigned int bufsize;//数组大小
}ringbuff_t;//环形缓冲区结构体
头指针名为指针,实际上就是一个记录当前可读取的位置,读取完加一;尾指针名为指针,实际上就是一个记录当前写入数据的位置,写入后加一;没必要用指针的形式,只是记录一下位置而已。读写数据注意别越界了。
头文件: ringbuff.h
#ifndef _RING_BUFF_H_
#define _RING_BUFF_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
//#define _DEBUG_RINGBUFF_ 0 //debug宏
typedef struct{
unsigned int head;//头指针,用来读
unsigned int tail;//尾指针,用来写
unsigned int lenth;//记录数据长度
unsigned char *data;//数组指针
unsigned int bufsize;//数组大小
}ringbuff_t;//环形缓冲区结构体
ringbuff_t * ringbuff_in