41 lines
1.1 KiB
C
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
|
|
} |