//初始化
typedef struct
{
uint16_t Head;//头指针 取出数据时移动头指针
uint16_t Tail;//尾指针 存入数据时移动尾指针
uint16_t Lenght;//长度 尾指针和头指针间的距离 代表存储数据的长度
uint8_t Ring_Buff[200];//缓冲大小 申请了200长度的数组用于存取数据
}RingBuff_t;
extern RingBuff_t ringBuff;
void RingBuff_Init();缓冲区初始化
uint8_t Write_RingBuff(uint8_t data);//入队
uint8_t Read_RingBuff(uint8_t *rData);//出队void RingBuff_Init(void) //初始化函数
{
ringBuff.Head=0; //头指针置于起始位
ringBuff.Tail=0; //尾指针置于起始位
ringBuff.Lenght=0; //计录当前数据长度 判断是否存有数据
}
//入队uint8_t Write_RingBuff(uint8_t data) //存入指定的缓冲数组并通过数据长度判断是否溢出 返回值0正常 1溢出
{
if(ringBuff.Lenght>=200) //200是申请的内存长度 可以修改 如果超过则为溢出
{
return 1; //确认数据溢出返回值1
}
ringBuff.Ring_Buff[ringBuff.Tail]=data; //将数据通过尾指针指向的地址存入Ring_Buff缓冲数组中
ringBuff.Tail=(ringBuff.Tail+1)%200; //构建尾部指针的循环 指针累加 指针地址超过199 则重新置于0
ringBuff.Lenght++; //记录存入数据的长度 判断数据的存有数量和溢出情况
return 0; //无溢出情况存入数据 返回值0
}
//出队uint8_t Read_RingBuff(uint8_t *rData) //从指定的缓冲数组中读出头指针指向地址的数据
{
if(ringBuff.Lenght==0) //如果数据长度为0 则此时缓冲数组中未存有数据
{
return 1; //取出数据失败 返回值0
}
*rData=ringBuff.Ring_Buff[ringBuff.Head]; //在Ring_buff中从头指针指向的地址中取出数据
ringBuff.Head=(ringBuff.Head+1)%200; //构建头部指针的循环 指针累加 指针地址超过199 则重新置于0
ringBuff.Lenght--; //取出数据时减去相应的数据长度
return 0; //取出数据正常 返回值0
}
c语言 循环队列 (crud版)
最新推荐文章于 2024-05-09 14:43:43 发布