加入电压电流数据传输的消息队列,取消直接访问变量

This commit is contained in:
不吃油炸鸡
2026-03-19 11:18:06 +08:00
parent 3a720a9088
commit 4f6bd98b96
6 changed files with 73 additions and 8 deletions

View File

@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -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);