最近做一个小项目,要做一个简单的FIFO,网上找到了一个轮子,但是,只能对单个数进行读写,就把轮子改造了一下。
#include "para.h"
RingBuff_t ringBuff;
void RingBuff_Init(void)
{
ringBuff.Head = 0;
ringBuff.Tail = 0;
ringBuff.Lenght = 0;
}
uint8_t Write_RingBuff(uint8_t data)
{
if(ringBuff.Lenght >=ringBuff_total_Length )
{
return 1;
}
ringBuff.Ring_Buff[ringBuff.Tail] = data;
ringBuff.Tail = (ringBuff.Tail + 1) % ringBuff_total_Length;
ringBuff.Lenght++;
return 0;
}
uint8_t Read_RingBuff(uint8_t *rData)
{
if(ringBuff.Lenght == 0)
{
return 1;
}
*rData = ringBuff.Ring_Buff[ringBuff.Head];
ringBuff.Head = (ringBuff.Head + 1) % ringBuff_total_Length;
ringBuff.Lenght--;
return 0;
}
uint8_t Write_RingBuff_Alex(uint8_t *data,uint16_t Length)
{
u16 l_count=0;
u8 L_Reslut=0;
for(l_count=0;l_count<Length;l_count++)
{
L_Reslut= Write_RingBuff(*data+l_count);
if(L_Reslut==1)
{
return 1;
}
}
return 0;
}
uint8_t Read_RingBuff_Alex(uint8_t *rData,uint16_t Length)
{
u16 l_count1=0;
u8 L_Reslut1=0;
for(l_count1=0;l_count1<Length;l_count1++)
{
L_Reslut1= Read_RingBuff(&(rData[0+l_count1]));
if(L_Reslut1==1)
{
return 1;
}
}
return 0;
}
#ifndef __PARA_H
#define __PARA_H
#include "sys.h"
#define ringBuff_total_Length 3
typedef struct
{
uint16_t Head;
uint16_t Tail;
uint16_t Lenght;
uint8_t Ring_Buff[ringBuff_total_Length];
}RingBuff_t;
extern RingBuff_t ringBuff;
void RingBuff_Init(void);
uint8_t Write_RingBuff(uint8_t data);
uint8_t Read_RingBuff(uint8_t *rData);
uint8_t Write_RingBuff_Alex(uint8_t *data,uint16_t Length);
uint8_t Read_RingBuff_Alex(uint8_t *rData,uint16_t Length);
#endif