199 lines
4.2 KiB
C
199 lines
4.2 KiB
C
|
#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
|