mirror of
https://github.com/No-Chicken/Power-Pico.git
synced 2026-04-03 13:02:36 +08:00
加入电压电流数据传输的消息队列,取消直接访问变量
This commit is contained in:
@@ -8,18 +8,26 @@ extern "C" {
|
||||
#include "FreeRTOS.h"
|
||||
#include "cmsis_os.h"
|
||||
|
||||
// 定义一个标志位,表示 ADC 数据已经准备好,可以发送了
|
||||
// 用于数据传输的结构体,包含电压和电流
|
||||
// 流向为 MessageSendTask -> LVGLtask
|
||||
typedef struct {
|
||||
float voltage; // 电压 (V)
|
||||
float current; // 电流 (uA)
|
||||
} PowerData_t;
|
||||
|
||||
// 定义一个标志位,表示 ADC 数据已经准备好,在ADC DMA中断中被置位
|
||||
// 在 MessageSendTask 中等待这个标志位,表示可以发送 ADC 数据了
|
||||
#define FLAG_ADC_HALF_READY 0x0001U // 0000 0001
|
||||
#define FLAG_ADC_FULL_READY 0x0002U // 0000 0010
|
||||
|
||||
extern osThreadId_t MessageSendTaskHandle; // 用于发送 ADC 数据的任务句柄
|
||||
extern osThreadId_t MessageSendTaskHandle;
|
||||
|
||||
extern osMessageQueueId_t Key_MessageQueue;
|
||||
extern osMessageQueueId_t PD_cmd_MessageQueue;
|
||||
extern osMessageQueueId_t PD_handle_event_MsgQueue;
|
||||
extern osMessageQueueId_t PowerDataQueue;
|
||||
|
||||
void User_Tasks_Init(void);
|
||||
void TaskTickHook(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
//gui
|
||||
#include "lvgl.h"
|
||||
#include "lv_lib_pm.h"
|
||||
#include "ui.h"
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
||||
@@ -41,11 +42,18 @@ void TaskTickHook(void)
|
||||
void LvHandlerTask(void *argument)
|
||||
{
|
||||
key_event_t key_event;
|
||||
PowerData_t power_data;
|
||||
uint32_t _time = 1; // default delay time
|
||||
while(1)
|
||||
{
|
||||
if(osMessageQueueGet(Key_MessageQueue, &key_event, NULL, 1)==osOK) {
|
||||
// 按键事件处理
|
||||
if(osMessageQueueGet(Key_MessageQueue, &key_event, NULL, 0)==osOK) {
|
||||
lv_lib_pm_handle_key_event(&key_event);
|
||||
}
|
||||
// 数据更新处理
|
||||
if(osMessageQueueGet(PowerDataQueue, &power_data, NULL, 0)==osOK) {
|
||||
// 刷新UI层的电压电流数据变量
|
||||
ui_update_vol_cur_varables(power_data.voltage, power_data.current);
|
||||
}
|
||||
_time = lv_timer_handler();
|
||||
osDelay(_time);
|
||||
|
||||
@@ -71,5 +71,20 @@ void MessageSendTask(void *argument)
|
||||
{
|
||||
Process_ADC_Chunk(&adc_raw_buffer[ADC_TIMES][0], 1);
|
||||
}
|
||||
|
||||
// 发送数据给UI层进行显示
|
||||
PowerData_t newData;
|
||||
Data_Monitor_Get_Values(&newData.voltage, &newData.current);
|
||||
|
||||
// 尝试发送,如果不等待直接返回错误,说明队列可能满了
|
||||
osStatus_t status = osMessageQueuePut(PowerDataQueue, &newData, 0, 0);
|
||||
|
||||
if (status == osErrorResource) {
|
||||
PowerData_t dummy;
|
||||
// 1. 强行从队列头部取出一个旧数据(丢弃)
|
||||
osMessageQueueGet(PowerDataQueue, &dummy, NULL, 0);
|
||||
// 2. 再次存入新数据
|
||||
osMessageQueuePut(PowerDataQueue, &newData, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,13 +83,23 @@ const osThreadAttr_t LvHandlerTask_attributes = {
|
||||
|
||||
|
||||
/* Message queues ------------------------------------------------------------*/
|
||||
|
||||
// Key task 中发送出的按键信息的消息队列
|
||||
// 流向为 KeyTask -> LVGLtask
|
||||
osMessageQueueId_t Key_MessageQueue;
|
||||
|
||||
// UI layer发送给PDUFPTask任务的命令消息队列
|
||||
// 流向为 LVGLtask -> PDUFPTask
|
||||
osMessageQueueId_t PD_cmd_MessageQueue;
|
||||
|
||||
// PDUFPTask任务发送给UI层的通知处理情况的消息队列
|
||||
// 流向为 PDUFPTask -> LVGLtask
|
||||
osMessageQueueId_t PD_handle_event_MsgQueue;
|
||||
|
||||
// 数据处理Task任务发送给UI层的电压电流数据的消息队列
|
||||
// 流向为 MessageSendTask -> LVGLtask
|
||||
osMessageQueueId_t PowerDataQueue;
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
void LvHandlerTask(void *argument);
|
||||
|
||||
@@ -110,6 +120,7 @@ void User_Tasks_Init(void)
|
||||
Key_MessageQueue = osMessageQueueNew(4, sizeof(key_event_t), NULL);
|
||||
PD_cmd_MessageQueue = osMessageQueueNew(4, sizeof(PD_command_msg_t), NULL);
|
||||
PD_handle_event_MsgQueue = osMessageQueueNew(4, 1, NULL); // uint8_t message
|
||||
PowerDataQueue = osMessageQueueNew(8, sizeof(PowerData_t), NULL);
|
||||
|
||||
/* add threads, ... */
|
||||
HardwareInitTaskHandle = osThreadNew(HardwareInitTask, NULL, &HardwareInitTask_attributes);
|
||||
|
||||
Reference in New Issue
Block a user