R2_UP/User/task/user_task.h

199 lines
4.2 KiB
C
Raw Permalink Normal View History

2025-03-12 10:46:02 +08:00
#ifndef USER_TASK_H
#define USER_TASK_H
/* Includes ----------------------------------------------------------------- */
#include <cmsis_os2.h>
#include "freertos_mpool.h"
#include "FreeRTOS.h"
#include "task.h"
#include "config.h"
/* Exported constants ------------------------------------------------------- */
/* 所有任务都要定义自己的任务运行频率 */
// 分配的频率该如何给定?
#define TASK_FREQ_CHASSIS (900u)
#define TASK_FREQ_CTRL_CMD (500u)
#define TASK_FREQ_NUC (500u)
#define TASK_FREQ_CAN (1000u)
#define TASK_FREQ_NAVI (500u)
#define TASK_FREQ_R12DS (1000u)
#define TASK_FREQ_ACTION (500u)
#define TASK_FREQ_UP (500u) //新加的上层
#define TASK_FREQ_ERROR_DTC (3u)
#define DEBUG
#define TASK_INIT_DELAY_ACTION (400u)
#define TASK_INIT_DELAY_NUC (500u)
/* Exported defines --------------------------------------------------------- */
/* Exported macro ----------------------------------------------------------- */
/* Exported types ----------------------------------------------------------- */
typedef struct {
/* 任务 */
struct {
osThreadId_t atti_esti;
// osThreadId_t chassis;
osThreadId_t dr16;
// osThreadId_t action_ops;
osThreadId_t up;
// osThreadId_t ai;
osThreadId_t can;
osThreadId_t cmd;
osThreadId_t nuc;
// osThreadId_t navi;
osThreadId_t error_detect;
} thread;
/* 队列 */
struct {
struct {
osMessageQueueId_t accl; /* IMU读取 */
osMessageQueueId_t gyro; /* IMU读取 */
osMessageQueueId_t eulr; /* 姿态结算得到欧拉角 */
} imu;
/* 控制指令 */
struct {
struct {
osMessageQueueId_t rc;
osMessageQueueId_t nuc;
osMessageQueueId_t eulr;/*姿态结算得到的欧拉角*/
osMessageQueueId_t Action;
osMessageQueueId_t ops_9_out;
}raw;
osMessageQueueId_t chassis;
osMessageQueueId_t status;
} cmd;
/* can任务放入、读取电机或电容的输入输出 */
struct {
struct {
osMessageQueueId_t chassis6020;
osMessageQueueId_t shoot5065;
osMessageQueueId_t chassis3508;
osMessageQueueId_t pitch6020;
} output;
struct {
osMessageQueueId_t CAN_feedback;//云台6020,3508,5065,sick,can上设备数据
osMessageQueueId_t shoot5065_feedback;
} feedback;
} can;
} msgq;
/*互斥量*/
struct {
SemaphoreHandle_t imu_eulr;
} mutex;
Config_t config; /* 机器人参数 */
#ifdef DEBUG
struct {
UBaseType_t chassis;
UBaseType_t can;
UBaseType_t atti_esti;
UBaseType_t dr16;
UBaseType_t action;
UBaseType_t cmd;
UBaseType_t nuc;
UBaseType_t navi;
UBaseType_t error_detect;
UBaseType_t up;
} stack_water_mark; /* stack使用 */
struct {
// float chassis;
float can;
float atti_esti;
float r12ds;
float cmd;
float nuc;
// float action;
// float navi;
float error_detect;
float up;
} freq; /* 任务运行频率 */
struct {
// float chassis;
float can;
float atti_esti;
// float ai;
float r12ds;
float cmd;
float nuc;
// float navi;
// float action;
float error_detect;
float up;
} last_up_time; /* 任务上一次运行的时间 */
#endif
} Task_Runtime_t;
extern Task_Runtime_t task_runtime;
extern const osThreadAttr_t attr_init;
extern const osThreadAttr_t attr_atti_esti;
//extern const osThreadAttr_t attr_chassis;
extern const osThreadAttr_t attr_can;
extern const osThreadAttr_t attr_cmd;
//extern const osThreadAttr_t attr_ops_9pos;
extern const osThreadAttr_t attr_nuc;
extern const osThreadAttr_t attr_error_detect;
extern const osThreadAttr_t attr_dr16;
//extern const osThreadAttr_t attr_navi;
extern const osThreadAttr_t attr_up;
/* Exported functions prototypes -------------------------------------------- */
void Task_Init(void *argument);
void Task_AttiEsti(void *argument);
//void Task_Chassis(void *argument);
void Task_can(void *argument);
void Task_cmd(void *argument);
void Task_nuc(void *argument);
//void Task_action(void *argument);
//void Task_Navi(void *argument);
void Task_up(void *argument);
void Task_error_detect(void *argument);
void Task_dr16(void *argument);
#endif