/* 底盘控制任务 */ /* Includes ----------------------------------------------------------------- */ #include "Chassis.h" #include "user_task.h" #include "can_use.h" #include #include "up.h" #include "vofa.h" static CAN_t can; #ifdef DEBUG CAN_Output_t out; Chassis_t chassis ; CMD_t ctrl; UP_t upp; #else static CAN_Output_t out; static Chassis_t chassis; static Chassis_Ctrl_t ctrl; static UP_t upp; #endif /** * \brief 底盘任务 * * \param argument */ void Task_Chassis(void *argument) { (void)argument; /* 未使用argument,消除警告*/ const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_UP; uint32_t tick = osKernelGetTickCount(); // // //// HAL_GPIO_WritePin(FlagForUpper_GPIO_Port,FlagForUpper_Pin,GPIO_PIN_RESET); //拉低电平 避免未清除 // while(1) { #ifdef DEBUG task_runtime.stack_water_mark.chassis = osThreadGetStackSpace(osThreadGetId()); #endif // /*imu数据获取*/ // osMessageQueueGet(task_runtime.msgq.imu.eulr, &chassis.pos088.imu_eulr, NULL, 0); // // osMessageQueueGet(task_runtime.msgq.imu.gyro, &chassis.pos088.bmi088.gyro,NULL, 0); // // osMessageQueueGet(task_runtime.msgq.imu.accl, &chassis.pos088.bmi088.accl,NULL, 0); // /*can上设备数据获取*/ // osMessageQueueGet(task_runtime.msgq.can.feedback.CAN_feedback, &can, NULL, 0); // // osMessageQueueGet(task_runtime.msgq.cmd.raw.Action, &chassis.Action_pos , NULL, 0); /*底盘控制信息获取,目前dji遥控器*/ osMessageQueueGet(task_runtime.msgq.cmd.chassis,&ctrl, NULL, 0); /*锁定RTOS(实时操作系统)内核,防止任务切换,直到 osKernelUnlock() 被调用*/ // osKernelLock(); /*更新电机反馈 */ Chassis_UpdateFeedback(&chassis, &can); /*底盘控制*/ Chassis_Control(&chassis,&ctrl,&out); /*解锁*/ // osKernelUnlock(); tick += delay_tick; osDelayUntil(tick); } }