#pragma once #ifdef __cplusplus extern "C" { #endif /* Includes ----------------------------------------------------------------- */ #include #include "FreeRTOS.h" #include "task.h" /* USER INCLUDE BEGIN */ #include "module/config.h" /* USER INCLUDE END */ /* Exported constants ------------------------------------------------------- */ /* 任务运行频率 */ #define TEST_FREQ (1000) #define MONITOR_FREQ (100) #define CMD_FREQ (500) #define CTRL_LEG_FREQ (800) #define CTRL_CHASSIS_FREQ (500) /* 任务初始化延时ms */ #define TASK_INIT_DELAY (100u) #define RC_INIT_DELAY (0) #define ATTI_ESTI_INIT_DELAY (0) #define TEST_INIT_DELAY (0) #define CLI_INIT_DELAY (0) #define MONITOR_INIT_DELAY (0) #define CMD_INIT_DELAY (0) #define CTRL_LEG_INIT_DELAY (200) #define CTRL_CHASSIS_INIT_DELAY (200) /* Exported defines --------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ /* 任务运行时结构体 */ typedef struct { /* 各任务,也可以叫做线程 */ struct { osThreadId_t rc; osThreadId_t atti_esti; osThreadId_t test; osThreadId_t cli; osThreadId_t monitor; osThreadId_t cmd; osThreadId_t ctrl_leg; osThreadId_t ctrl_chassis; } thread; /* USER MESSAGE BEGIN */ struct { // osMessageQueueId_t user_msg; /* 用户自定义任务消息队列 */ struct { osMessageQueueId_t eulr_imu; } body; struct { struct { osMessageQueueId_t rc; /* 原始数据消息队列 */ osMessageQueueId_t host; /* 上位机控制消息队列 */ }raw; /* 原始数据消息队列 */ osMessageQueueId_t chassis; }cmd; /* 控制命令消息队列 */ struct { osMessageQueueId_t feefback; osMessageQueueId_t output; }chassis; /* 底盘控制消息队列 */ } msgq; /* USER MESSAGE END */ /* 机器人状态 */ struct { float battery; /* 电池电量百分比 */ float vbat; /* 电池电压 */ float cpu_temp; /* CPU温度 */ } status; /* USER CONFIG BEGIN */ Config_t config; /* 用户配置结构体,包含所有用户配置的参数 */ /* USER CONFIG END */ /* 各任务的stack使用 */ struct { UBaseType_t rc; UBaseType_t atti_esti; UBaseType_t test; UBaseType_t cli; UBaseType_t monitor; UBaseType_t cmd; UBaseType_t ctrl_leg; UBaseType_t ctrl_chassis; } stack_water_mark; /* 各任务运行频率 */ struct { float test; float monitor; float cmd; float ctrl_leg; float ctrl_chassis; } freq; /* 任务最近运行时间 */ struct { float test; float monitor; float cmd; float ctrl_leg; float ctrl_chassis; } last_up_time; } Task_Runtime_t; /* 任务运行时结构体 */ extern Task_Runtime_t task_runtime; /* 初始化任务句柄 */ extern const osThreadAttr_t attr_init; extern const osThreadAttr_t attr_rc; extern const osThreadAttr_t attr_atti_esti; extern const osThreadAttr_t attr_test; extern const osThreadAttr_t attr_cli; extern const osThreadAttr_t attr_monitor; extern const osThreadAttr_t attr_cmd; extern const osThreadAttr_t attr_ctrl_leg; extern const osThreadAttr_t attr_ctrl_chassis; /* 任务函数声明 */ void Task_Init(void *argument); void Task_rc(void *argument); void Task_atti_esti(void *argument); void Task_test(void *argument); void Task_cli(void *argument); void Task_monitor(void *argument); void Task_cmd(void *argument); void Task_ctrl_leg(void *argument); void Task_ctrl_chassis(void *argument); #ifdef __cplusplus } #endif