41 lines
1.1 KiB
C

#include <rtthread.h>
#include <finsh.h>
#include "common.h"
#include "param_config.h"
#include "ble_pub.h"
#include "drv_oled.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "ring_queue.h"
void RingQueue_init(RingQueue *q) {
q->front = 0;
q->rear = 0;
q->size = 0;
}
bool RingQueue_isFull(RingQueue *q) {
return q->size == MAX_SIZE;
}
int RingQueue_size(RingQueue* q) {
return q->size;
}
bool RingQueue_enqueue(RingQueue *q, int value) {
if (RingQueue_isFull(q)) {
return false; // 队列已满,返回失败
}
q->data[q->rear] = value; // 将值放入队尾
q->rear = (q->rear + 1) % MAX_SIZE; // 更新队尾指针,注意使用模运算实现循环
q->size++; // 队列大小加一
return true; // 成功入队返回true
}
bool RingQueue_dequeue(RingQueue *q, int *value) {
if (q->size == 0) { // 队列为空,返回失败
return false;
}
*value = q->data[q->front]; // 获取队头元素的值
q->front = (q->front + 1) % MAX_SIZE; // 更新队头指针,注意使用模运算实现循环
q->size--; // 队列大小减一
return true; // 成功出队返回true
}