#include "user_queue.h" #include Queue queue; DATA_LOAD_T data_load; //初始化队列 void InitQueue(pQueue queue) { queue->qFront = 0; queue->qRear = 0; } //队列是否为空 bool IsEmptyQueue(pQueue queue) { if (queue->qFront == queue->qRear)//队首等于队尾 return true; else return false; } //队列是否为满 bool IsFullQueue(pQueue queue) { //队尾下个数据为队首 if (((queue->qRear + 1) % QUEUE_ZISE) == queue->qFront) return true; else return false; } //入队 uint8_t EnterQueue(pQueue queue, uint8_t *value,uint16_t len) { if (IsFullQueue(queue)) { return 0; } //从队尾入队 memcpy(&queue->BasicArr[queue->qRear],value,len); queue->qRear = (queue->qRear + len) % QUEUE_ZISE;//队尾移向下个位置 return 1; } //出队 uint8_t OutQueue(pQueue queue,uint8_t *out,uint16_t len) { if (IsEmptyQueue(queue)) { return 0; } memcpy(out,&queue->BasicArr[queue->qFront],len);//出队值 queue->qFront = (queue->qFront + len) % QUEUE_ZISE;//指向下一个出队值 return 1; } uint8_t Analysis_Queue_data(pQueue queue) { uint8_t bcc=0,i,bcc1=0; if (IsEmptyQueue(queue))//判断队列是否有数据 { return 0; } while(queue->BasicArr[queue->qFront] != 0xAA)//找帧头 { queue->qFront++; if(IsEmptyQueue(queue)==true) return 0; } bcc = queue->BasicArr[queue->BasicArr[++queue->qFront]+2] ;//校验位 此时队首到了帧长的位置 for(i=2;iBasicArr[queue->qFront]+2;i++) { bcc1+=queue->BasicArr[i] ; } if(bcc != bcc1)//判断校验 { return 0; } if(queue->BasicArr[queue->BasicArr[queue->qFront]+3]!=0x55)//判断帧尾 { return 0; } queue->qFront--;//回到队首 return 1; }