97 lines
1.6 KiB
C
97 lines
1.6 KiB
C
#include "user_queue.h"
|
|
#include<string.h>
|
|
|
|
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;i<queue->BasicArr[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;
|
|
}
|
|
|
|
|