单片机程序常用的消息队列
2026/7/7 4:12:28 网站建设 项目流程

// 队列缓存长度,电磁炉场景可设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);

}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询