duolun/User/task/user_task.h
2025-09-29 19:05:35 +08:00

119 lines
2.9 KiB
C

#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ----------------------------------------------------------------- */
#include <cmsis_os2.h>
#include "FreeRTOS.h"
#include "task.h"
/* USER INCLUDE BEGIN */
#include "module/config.h"
#define DEBUG
/* USER INCLUDE END */
/* Exported constants ------------------------------------------------------- */
/* 任务运行频率 */
#define TASK1_FREQ (500.0)
#define TASK2_FREQ (500.0)
#define TASK3_FREQ (500.0)
#define TASK4_FREQ (500.0)
#define TASK5_FREQ (500.0)
/* 任务初始化延时ms */
#define TASK_INIT_DELAY (100u)
#define TASK1_INIT_DELAY (0)
#define TASK2_INIT_DELAY (0)
#define TASK3_INIT_DELAY (0)
#define TASK4_INIT_DELAY (0)
#define TASK5_INIT_DELAY (0)
/* Exported defines --------------------------------------------------------- */
/* Exported macro ----------------------------------------------------------- */
/* Exported types ----------------------------------------------------------- */
/* 任务运行时结构体 */
typedef struct {
/* 各任务,也可以叫做线程 */
struct {
osThreadId_t Task1;
osThreadId_t Task2;
osThreadId_t Task3;
osThreadId_t Task4;
osThreadId_t Task5;
} thread;
/* USER MESSAGE BEGIN */
struct {
osMessageQueueId_t user_msg; /* 用户自定义任务消息队列 */
osMessageQueueId_t dr16_data; /* dr16遥控器数据 */
struct{
osMessageQueueId_t gyro;
osMessageQueueId_t eulr;
}imu;
} 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 Task1;
UBaseType_t Task2;
UBaseType_t Task3;
UBaseType_t Task4;
UBaseType_t Task5;
} stack_water_mark;
/* 各任务运行频率 */
struct {
float Task1;
float Task2;
float Task3;
float Task4;
float Task5;
} freq;
/* 任务最近运行时间 */
struct {
float Task1;
float Task2;
float Task3;
float Task4;
float Task5;
} last_up_time;
} Task_Runtime_t;
/* 任务运行时结构体 */
extern Task_Runtime_t task_runtime;
/* 初始化任务句柄 */
extern const osThreadAttr_t attr_init;
extern const osThreadAttr_t attr_Task1;
extern const osThreadAttr_t attr_Task2;
extern const osThreadAttr_t attr_Task3;
extern const osThreadAttr_t attr_Task4;
extern const osThreadAttr_t attr_Task5;
/* 任务函数声明 */
void Task_Init(void *argument);
void Task_Task1(void *argument);
void Task_Task2(void *argument);
void Task_Task3(void *argument);
void Task_Task4(void *argument);
void Task_Task5(void *argument);
#ifdef __cplusplus
}
#endif