数据环形缓冲区:
#define FIFO_BUF_SIZE 512 //必须是2的幂次方
#define FIFO_BUF_SIZE_MASK (FIFO_BUF_SIZE - 1)
typedef struct
{
uint32 head; //头指针
uint32 tail; //尾指针
uint8 buf[FIFO_BUF_SIZE]; //缓冲区
} fifo_buf_t;
缓冲区接口:
status_t fifo_empty(fifo_buf_t* fifo) //判断缓冲区是否为空
{
if (fifo->tail == fifo->head) // empty
{
return OK;
}
return ER;
}
status_t fifo_full(fifo_buf_t* fifo) //判断缓冲区是否为满
{
if (((fifo->tail + 1) & FIFO_BUF_SIZE_MASK) ==
fifo->head) // full
{
return OK;
}
return ER;
}
status_t fifo_put(fifo_buf_t* fifo, uint8 c) //往缓冲区放一个字节
{
if (fifo_full(fifo) == OK) // full
{
return ER;
}
fifo->buf[fifo->tail] = c;
fifo->tail ++;
fifo->tail &= FIFO_BUF_SIZE_MASK;