// 队列缓存长度,电磁炉场景可设64/128
#define QUEUE_MAX_LEN 64
// 队列结构体
typedef struct
{
uint8_t buf[QUEUE_MAX_LEN];
uint8_t front; // 队头,出队
uint8_t rear; // 队尾,入队
uint8_t count; // 当前有效数据个数
} Queue_t;
// 函数声明
void Queue_Init(Queue_t *q);//初始化队列
uint8_t Queue_Enqueue(Queue_t *q, uint8_t dat);//入列
uint8_t Queue_Dequeue(Queue_t *q, uint8_t *dat);//出列
uint8_t Queue_IsEmpty(Queue_t *q);//队列是否为空
uint8_t Queue_IsFull(Queue_t *q);//队列是否满了
// 队列初始化
void Queue_Init(Queue_t *q)
{
q->front = 0;
q->rear = 0;
q->count = 0;
}
// 入队:返回1成功,0队列满
uint8_t Queue_Enqueue(Queue_t *q, uint8_t dat)
{
if(Queue_IsFull(q))
return 0;
q->buf[q->rear] = dat;
q->rear = (q->rear + 1) % QUEUE_MAX_LEN;
q->count++;
return 1;
}
// 出队:返回1成功,0队空,数据存入*dat
uint8_t Queue_Dequeue(Queue_t *q, uint8_t *dat)
{
if(Queue_IsEmpty(q)) return 0;
*dat = q->buf[q->front];
q->front = (q->front + 1) % QUEUE_MAX_LEN;
q->count--;
return 1;
} // 判断空
uint8_t Queue_IsEmpty(Queue_t *q)
{
return (q->count == 0);
}
// 判断满
uint8_t Queue_IsFull(Queue_t *q)
{
return (q->count == QUEUE_MAX_LEN);
}