From cf1bc7b2ae9f45e296e42b190624bab9e2ff2cd1 Mon Sep 17 00:00:00 2001 From: TuxMonkey Date: Mon, 9 Mar 2026 02:35:08 +0800 Subject: [PATCH] daemon init failed --- Core/Src/freertos.c | 39 ++++++++++++++++++- .../power_meters/xiditech/xidipwmeter.c | 8 ++-- User_Code/module/software/daemon/daemon.c | 3 +- User_Code/user_task/dev_tasks/dev_cmd.c | 5 ++- User_Code/user_task/dev_tasks/dev_cmd.h | 38 +++++++++--------- 5 files changed, 66 insertions(+), 27 deletions(-) diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index d4abddb..49d33b4 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -131,7 +131,21 @@ const osThreadAttr_t instask_attributes = { //@Todo:测试使用 osThreadId insTaskHandle; -void StartINSTASK(void const *argument); +void StartINSTASK(void *argument); + + + +//@Todo:测试daemon(但是没有daemon注册) +const osThreadAttr_t daemon_attributes = { + .name = "daemon", + .priority = osPriorityAboveNormal, // 较高优先级 + .stack_size = 1024 * 4 // 栈大小,单位是字节(通常是字数的4倍) + }; + +//@Todo:测试使用 +osThreadId daemonHandle; + +void DaemonTask(); /* USER CODE END FunctionPrototypes */ @@ -249,6 +263,10 @@ void MX_FREERTOS_Init(void) //@Todo:INS_Task是测试版本 // 创建线程 insTaskHandle = osThreadNew(StartINSTASK, NULL, &instask_attributes); + + //@Todo:daemon是测试版本 + // 创建线程 + daemonHandle = osThreadNew(DaemonTask, NULL, &daemon_attributes); /* USER CODE END RTOS_THREADS */ /* USER CODE BEGIN RTOS_EVENTS */ @@ -406,7 +424,7 @@ __weak void RefereeTask(void *argument) /* USER CODE BEGIN Application */ //@Todo:INS_Task是测试阶段使用。 -__attribute__((noreturn)) void StartINSTASK(void const *argument) +__attribute__((noreturn)) void StartINSTASK(void *argument) { static float ins_start; static float ins_dt; @@ -425,6 +443,23 @@ __attribute__((noreturn)) void StartINSTASK(void const *argument) } } +/** +* @brief Function implementing the reference thread. +* @param argument: Not used +* @retval None +* @Todo:Deamon task +*/ +/* USER CODE END Header_RefereeTask */ +__weak void DaemonTask() +{ + /* USER CODE BEGIN DaemonTask */ + /* Infinite loop */ + for (;;) + { + osDelay(1); + } + /* USER CODE END RefereeTask */ +} /* USER CODE END Application */ diff --git a/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c b/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c index 5c51704..49f7625 100644 --- a/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c +++ b/User_Code/module/periph/power_meters/xiditech/xidipwmeter.c @@ -31,10 +31,10 @@ void XidiPowerMeterDecode(FDCANInstance *_instance) XidiPowerMeter_Msg_s *measure = &power_meter_instance->powermeter_msg; // 重载守护进程 - // if (power_meter_instance->daemon != NULL) - // { - // DaemonReload(power_meter_instance->daemon); - // } + if (power_meter_instance->daemon != NULL) + { + DaemonReload(power_meter_instance->daemon); + } // 计算时间间隔 measure->dt = DWT_GetDeltaT(&power_meter_instance->feed_cnt); diff --git a/User_Code/module/software/daemon/daemon.c b/User_Code/module/software/daemon/daemon.c index 8e9d905..f5326cc 100644 --- a/User_Code/module/software/daemon/daemon.c +++ b/User_Code/module/software/daemon/daemon.c @@ -1,7 +1,8 @@ #include "daemon.h" #include "bsp_dwt.h" -#include "stdlib.h" +#include "cmsis_os2.h" #include "memory.h" +#include "stdlib.h" /* 用于保存所有的daemon instance */ static Daemon_Instance *daemon_instances[DAEMON_MAX_NUM]; diff --git a/User_Code/user_task/dev_tasks/dev_cmd.c b/User_Code/user_task/dev_tasks/dev_cmd.c index f19c0c2..1092e98 100644 --- a/User_Code/user_task/dev_tasks/dev_cmd.c +++ b/User_Code/user_task/dev_tasks/dev_cmd.c @@ -45,9 +45,10 @@ void RobotCMDInit() } } // ==================== 4. 在控制任务中读取使用 ==================== -void CmdTask() +void CmdTask(void *argument) { RobotCMDInit(); + DaemonReload(chassis_power_meter->daemon); while (1) { if (chassis_power_meter != NULL) @@ -62,4 +63,4 @@ void CmdTask() osDelay(10); // 根据实际需要调整读取频率 } -} +} \ No newline at end of file diff --git a/User_Code/user_task/dev_tasks/dev_cmd.h b/User_Code/user_task/dev_tasks/dev_cmd.h index 5570b28..dca44b7 100644 --- a/User_Code/user_task/dev_tasks/dev_cmd.h +++ b/User_Code/user_task/dev_tasks/dev_cmd.h @@ -1,20 +1,22 @@ -// // -// // Created by ASUS on 2025/12/15. -// // // -// #ifndef TRONONEH7_SCAFFOLD_DEV_CMD_H -// #define TRONONEH7_SCAFFOLD_DEV_CMD_H +// Created by ASUS on 2025/12/15. // -// /** -// * @brief 机器人核心控制任务初始化,会被RobotInit()调用 -// * -// */ -// void RobotCMDInit(); -// -// /** -// * @brief 机器人核心控制任务,200Hz频率运行(必须高于视觉发送频率) -// * -// */ -// void RobotCMDTask(); -// -// #endif //TRONONEH7_SCAFFOLD_DEV_CMD_H + +#ifndef TRONONEH7_SCAFFOLD_DEV_CMD_H +#define TRONONEH7_SCAFFOLD_DEV_CMD_H + +// 如果用到了 FreeRTOS 的 API,可以在这里包含,或者在需要用到的源文件里包含 +// #include "cmsis_os2.h" + +/** + * @brief 机器人指令控制及外设初始化 + */ +void RobotCMDInit(void); + +/** + * @brief 指令下发主任务 (FreeRTOS 线程) + * @param argument 线程传入参数 + */ +void CmdTask(void *argument); + +#endif // TRONONEH7_SCAFFOLD_DEV_CMD_H