ZNKT-ST-M/queue/user_queue.c
2025-01-15 16:02:53 +08:00

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