| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #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;
- }
|