move_xrobot/User/task/init.c
2025-01-14 10:35:04 +08:00

131 lines
5.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
初始化任务
根据机器人的FLASH配置决定生成哪些任务。
*/
/* Includes ----------------------------------------------------------------- */
#include "bsp\flash.h"
#include "bsp\usb.h"
#include "component\cmd.h"
#include "device\bmi088.h"
#include "device\can.h"
#include "device\ist8310.h"
#include "device\referee.h"
#include "module\cap.h"
#include "module\chassis.h"
#include "module\gimbal.h"
#include "module\shoot.h"
#include "task\user_task.h"
/* Private typedef ---------------------------------------------------------- */
/* Private define ----------------------------------------------------------- */
/* Private macro ------------------------------------------------------------ */
/* Private variables -------------------------------------------------------- */
/* Private function --------------------------------------------------------- */
/* Exported functions ------------------------------------------------------- */
/**
* \brief 初始化
*
* \param argument 未使用
*/
void Task_Init(void *argument) {
(void)argument; /* 未使用argument消除警告 */
Config_Get(&task_runtime.cfg); /* 获取机器人配置 */
osKernelLock();
/* 创建任务 */
task_runtime.thread.atti_esti =
osThreadNew(Task_AttiEsti, NULL, &attr_atti_esti);
task_runtime.thread.cli = osThreadNew(Task_CLI, NULL, &attr_cli);
task_runtime.thread.command = osThreadNew(Task_Command, NULL, &attr_command);
task_runtime.thread.ctrl_chassis =
osThreadNew(Task_CtrlChassis, NULL, &attr_ctrl_chassis);
task_runtime.thread.ctrl_gimbal =
osThreadNew(Task_CtrlGimbal, NULL, &attr_ctrl_gimbal);
task_runtime.thread.ctrl_shoot =
osThreadNew(Task_CtrlShoot, NULL, &attr_ctrl_shoot);
task_runtime.thread.info = osThreadNew(Task_Info, NULL, &attr_info);
task_runtime.thread.monitor = osThreadNew(Task_Monitor, NULL, &attr_monitor);
task_runtime.thread.can = osThreadNew(Task_Can, NULL, &attr_can);
task_runtime.thread.referee = osThreadNew(Task_Referee, NULL, &attr_referee);
task_runtime.thread.ai = osThreadNew(Task_Ai, NULL, &attr_ai);
task_runtime.thread.rc = osThreadNew(Task_RC, NULL, &attr_rc);
task_runtime.thread.cap = osThreadNew(Task_Cap, NULL, &attr_cap);
/* 创建消息队列 */
/* motor */
task_runtime.msgq.can.feedback.chassis =
osMessageQueueNew(2u, sizeof(CAN_t), NULL);
task_runtime.msgq.can.feedback.gimbal =
osMessageQueueNew(2u, sizeof(CAN_t), NULL);
task_runtime.msgq.can.feedback.shoot =
osMessageQueueNew(2u, sizeof(CAN_t), NULL);
task_runtime.msgq.can.feedback.cap =
osMessageQueueNew(2u, sizeof(CAN_t), NULL);
task_runtime.msgq.can.output.chassis =
osMessageQueueNew(2u, sizeof(CAN_ChassisOutput_t), NULL);
task_runtime.msgq.can.output.gimbal =
osMessageQueueNew(2u, sizeof(CAN_GimbalOutput_t), NULL);
task_runtime.msgq.can.output.shoot =
osMessageQueueNew(2u, sizeof(CAN_ShootOutput_t), NULL);
task_runtime.msgq.can.output.cap =
osMessageQueueNew(2u, sizeof(CAN_CapOutput_t), NULL);
/* command */
task_runtime.msgq.cmd.chassis =
osMessageQueueNew(3u, sizeof(CMD_ChassisCmd_t), NULL);
task_runtime.msgq.cmd.gimbal =
osMessageQueueNew(3u, sizeof(CMD_GimbalCmd_t), NULL);
task_runtime.msgq.cmd.shoot =
osMessageQueueNew(3u, sizeof(CMD_ShootCmd_t), NULL);
task_runtime.msgq.cmd.ai =
osMessageQueueNew(3u, sizeof(CMD_AI_Status_t), NULL);
task_runtime.msgq.cmd.referee = osMessageQueueNew(6u, sizeof(CMD_UI_t), NULL);
/* atti_esti */
task_runtime.msgq.cmd.raw.rc = osMessageQueueNew(3u, sizeof(CMD_RC_t), NULL);
task_runtime.msgq.cmd.raw.host =
osMessageQueueNew(3u, sizeof(CMD_Host_t), NULL);
task_runtime.msgq.gimbal.accl =
osMessageQueueNew(2u, sizeof(AHRS_Accl_t), NULL);
task_runtime.msgq.gimbal.eulr_imu =
osMessageQueueNew(2u, sizeof(AHRS_Eulr_t), NULL);
task_runtime.msgq.gimbal.gyro =
osMessageQueueNew(2u, sizeof(AHRS_Gyro_t), NULL);
task_runtime.msgq.cap_info =
osMessageQueueNew(2u, sizeof(CAN_Capacitor_t), NULL);
/* AI */
task_runtime.msgq.ai.quat =
osMessageQueueNew(2u, sizeof(AHRS_Quaternion_t), NULL);
/* 裁判系统 */
task_runtime.msgq.referee.ai =
osMessageQueueNew(2u, sizeof(Referee_ForAI_t), NULL);
task_runtime.msgq.referee.chassis =
osMessageQueueNew(2u, sizeof(Referee_ForChassis_t), NULL);
task_runtime.msgq.referee.cap =
osMessageQueueNew(2u, sizeof(Referee_ForCap_t), NULL);
task_runtime.msgq.referee.shoot =
osMessageQueueNew(2u, sizeof(Referee_ForShoot_t), NULL);
/* UI */
task_runtime.msgq.ui.chassis =
osMessageQueueNew(2u, sizeof(Referee_ChassisUI_t), NULL);
task_runtime.msgq.ui.cap =
osMessageQueueNew(2u, sizeof(Referee_CapUI_t), NULL);
task_runtime.msgq.ui.gimbal =
osMessageQueueNew(2u, sizeof(Referee_GimbalUI_t), NULL);
task_runtime.msgq.ui.shoot =
osMessageQueueNew(2u, sizeof(Referee_ShootUI_t), NULL);
task_runtime.msgq.ui.cmd = osMessageQueueNew(2u, sizeof(bool), NULL);
osKernelUnlock();
osThreadTerminate(osThreadGetId()); /* 结束自身 */
}