#include "fifo.h" #include "Uart.h" FIFO_T g_rxfifo; FIFO_T g_txfifo; /*----------------------------------------------------------------- * 初始化fifo * ----------------------------------------------------------------*/ void init_fifo(FIFO_T *fifo) { uint8_t i = 0; for(i=0;i<8;i++){ memset(fifo->memory[i].da,0,256); fifo->memory[i].len = 0; } fifo->flag = FALSE; fifo->front = fifo->rear = 0; printf("循环队列已经创建完毕\n"); return ; } /*----------------------------------------------------------------- * 判断fifo是否已满 * 满返回1 否则返回0 * -----------------------------------------------------------------*/ bool fifo_is_full(FIFO_T *fifo) { if ((fifo->front == fifo->rear) && fifo->flag) { printf("循环队列已满!-fifo\n"); return TRUE; } return FALSE; } /*------------------------------------------------------------------ * 判断fio是否已空 * 空返回 1: 否则返回0 * -----------------------------------------------------------------*/ bool fifo_is_empty(FIFO_T *fifo) { if ((fifo->front == fifo->rear) && !(fifo->flag)) // 判断队空 flag 为false return TRUE; return FALSE; } /*------------------------------------------------------------------ * 写入数据到fifo * 1:写入 0: 操作失败 * -----------------------------------------------------------------*/ uint8_t fifo_write(FIFO_T *fifo,uint8_t *data,uint8_t len) { if ((fifo->front == fifo->rear) && fifo->flag) { // printf("循环队列已满!-write front=%d,flag = %d\n",fifo->front,fifo->flag); return 0; } memcpy(fifo->memory[fifo->rear].da,data,len); fifo->memory[fifo->rear].len = len; ++(fifo->rear); fifo->rear %= MAXSIZE; if (fifo->rear == fifo->front) // 设置队列已满 fifo->flag = TRUE; return 1; } /*------------------------------------------------------------------ * 从fifo中读取数据 * -----------------------------------------------------------------*/ uint8_t fifo_read(FIFO_T *fifo,uint8_t *data) { uint8_t len; if ((fifo->front == fifo->rear) && !(fifo->flag)) // 判断队空 { printf("队列为空!不能进行删除操作\n"); return 0; } len = fifo->memory[fifo->front].len; memcpy(data,fifo->memory[fifo->front].da,len); //memset(fifo->memory[fifo->front].da,0,256); fifo->memory[fifo->front].len = 0; fifo->front++; fifo->front %= MAXSIZE; if (fifo->front == fifo->rear) // 设置队列为空 fifo->flag = FALSE; return len; }