/
#include<stdint.h>
struct FIFO
{
uint16_t tx,rx;
uint16_t len;
uint8_t* buf;
}
void fifo_init(struct FIFO*f,uint8_t* buf,uint16_t len)
{
f->rx=f->tx=0;
f->buf = buf;
f->len = len;
}
uint16_t fifo_put(struct FIFO*f,uint8_t* buf,uint16_t len)
{
uint16_t i=0;
while((((f->rx+1)&(f->len-1))!=f->tx)&&i<len)
{
f->buf[f->rx++]=buf[i++];
f->rx &=f->len-1;
}
return i;//返回放入的数据长
}
uint16_t fifo_get(struct FIFO*f,uint8_t* buf,uint16_t len)
{
uint16_t i=0;
while((f->rx!=f->tx)&&i<len)
{
buf[i++]=f->buf[tx++]
f->tx &=f->len-1;
}
return i;//返回取出的数据长
}
极其简单