From ef4f1a15eef76823f0bb23cf76d52d7288f6315e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=90=83=E6=B2=B9=E7=82=B8=E9=B8=A1?= <1425962791@qq.com> Date: Thu, 5 Feb 2026 11:08:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4data=20queue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Power_Pico/BSP/GATE/gate.c | 1 - Power_Pico/BSP/data_queue/data_queue.c | 103 ------------------------- Power_Pico/BSP/data_queue/data_queue.h | 60 -------------- 3 files changed, 164 deletions(-) delete mode 100644 Power_Pico/BSP/data_queue/data_queue.c delete mode 100644 Power_Pico/BSP/data_queue/data_queue.h diff --git a/Power_Pico/BSP/GATE/gate.c b/Power_Pico/BSP/GATE/gate.c index 465c85f..9f141e0 100644 --- a/Power_Pico/BSP/GATE/gate.c +++ b/Power_Pico/BSP/GATE/gate.c @@ -1,5 +1,4 @@ #include "gate.h" -#include "data_queue.h" #include "math.h" uint8_t gate_status = HIGH_CUR; // Default status diff --git a/Power_Pico/BSP/data_queue/data_queue.c b/Power_Pico/BSP/data_queue/data_queue.c deleted file mode 100644 index 62ce4bd..0000000 --- a/Power_Pico/BSP/data_queue/data_queue.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "./data_queue.h" -#include -#include -#include - -QueueHandle_t global_voltage_queue; -QueueHandle_t global_current_queue; - -struct Data_Queue { - float *buffer; // 存储 float 数据的缓冲区 - size_t length; // 最大长度 - size_t head; // 头指针(出队) - size_t tail; // 尾指针(入队) - size_t count; // 当前元素个数 - double sum; // 当前所有元素的和(用于平均值) -}; - -QueueHandle_t queue_create(size_t length) { - if (length == 0) return NULL; - - struct Data_Queue *q = (struct Data_Queue*)malloc(sizeof(struct Data_Queue)); - if (!q) return NULL; - - q->buffer = (float*)malloc(sizeof(float) * length); - if (!q->buffer) { - free(q); - return NULL; - } - - q->length = length; - q->head = 0; - q->tail = 0; - q->count = 0; - q->sum = 0.0; - - return q; -} - -void queue_destroy(QueueHandle_t Data_Queue) { - if (Data_Queue) { - free(Data_Queue->buffer); - free(Data_Queue); - } -} - -int queue_push(QueueHandle_t Data_Queue, float item) { - if (!Data_Queue) { - return -1; // 队列未初始化 - } - - // 如果队列已满,先移除最旧的数据 - if (Data_Queue->count == Data_Queue->length) { - float old_item; - queue_pop(Data_Queue, &old_item); // 自动移除最旧的数据 - } - - // 添加数据到 tail 位置 - Data_Queue->buffer[Data_Queue->tail] = item; - - // 更新 sum - Data_Queue->sum += item; - - // 更新 tail - Data_Queue->tail = (Data_Queue->tail + 1) % Data_Queue->length; - Data_Queue->count++; - - return 0; -} - -int queue_pop(QueueHandle_t Data_Queue, float *item) { - if (!Data_Queue || !item || Data_Queue->count == 0) { - return -1; // 队列空 - } - - // 从 head 位置取数据 - *item = Data_Queue->buffer[Data_Queue->head]; - - // 更新 sum - Data_Queue->sum -= *item; - - // 更新 head - Data_Queue->head = (Data_Queue->head + 1) % Data_Queue->length; - Data_Queue->count--; - - return 0; -} - -double queue_average(QueueHandle_t Data_Queue) { - if (!Data_Queue || Data_Queue->count == 0) { - return 0.0; - } - return Data_Queue->sum / Data_Queue->count; -} - -size_t queue_size(QueueHandle_t Data_Queue) { - if (!Data_Queue) return 0; - return Data_Queue->count; -} - -size_t queue_capacity(QueueHandle_t Data_Queue) { - if (!Data_Queue) return 0; - return Data_Queue->length; -} diff --git a/Power_Pico/BSP/data_queue/data_queue.h b/Power_Pico/BSP/data_queue/data_queue.h deleted file mode 100644 index 36774b6..0000000 --- a/Power_Pico/BSP/data_queue/data_queue.h +++ /dev/null @@ -1,60 +0,0 @@ -// data_queue.h -#ifndef DATA_QUEUE_H -#define DATA_QUEUE_H - -#include -#include - -// 队列句柄(不透明指针) -typedef struct Data_Queue* QueueHandle_t; - -/** - * @brief 创建一个队列 - * @param length: 队列最大长度 - * @return 队列句柄,失败返回 NULL - */ -QueueHandle_t queue_create(size_t length); - -/** - * @brief 销毁队列 - * @param Data_Queue: 队列句柄 - */ -void queue_destroy(QueueHandle_t Data_Queue); - -/** - * @brief 入队(Push) - * @param Data_Queue: 队列句柄 - * @param item: 指向要入队的数据 - * @return 0=成功,-1=失败(队列满) - */ -int queue_push(QueueHandle_t Data_Queue, float item); - -/** - * @brief 出队(Pop) - * @param Data_Queue: 队列句柄 - * @param item: 指向接收数据的缓冲区 - * @return 0=成功,-1=失败(队列空) - */ -int queue_pop(QueueHandle_t Data_Queue, float *item); - -/** - * @brief 获取队列中当前元素的平均值(仅适用于数值类型) - * @param Data_Queue: 队列句柄 - * @return 平均值,若队列空则返回 0.0 - */ -double queue_average(QueueHandle_t Data_Queue); - -/** - * @brief 获取队列当前大小 - */ -size_t queue_size(QueueHandle_t Data_Queue); - -/** - * @brief 获取队列最大容量 - */ -size_t queue_capacity(QueueHandle_t Data_Queue); - -extern QueueHandle_t global_voltage_queue; -extern QueueHandle_t global_current_queue; - -#endif // DATA_QUEUE_H