112 lines
2.7 KiB
C
112 lines
2.7 KiB
C
/*
|
||
底盘控制任务
|
||
*/
|
||
/* Includes ----------------------------------------------------------------- */
|
||
|
||
#include "Chassis.h"
|
||
#include "user_task.h"
|
||
#include "can_use.h"
|
||
#include <cmsis_os2.h>
|
||
|
||
#include "vofa.h"
|
||
|
||
static CAN_t can;
|
||
|
||
|
||
#ifdef DEBUG
|
||
|
||
CAN_Output_t out;
|
||
|
||
Chassis_t chassis ;
|
||
|
||
CMD_t ctrl;
|
||
|
||
|
||
#else
|
||
|
||
static CAN_Output_t out;
|
||
|
||
static Chassis_t chassis;
|
||
|
||
static Chassis_Ctrl_t ctrl;
|
||
|
||
|
||
|
||
#endif
|
||
|
||
|
||
|
||
/**
|
||
* \brief 底盘任务
|
||
*
|
||
* \param argument
|
||
*/
|
||
void Task_Chassis(void *argument)
|
||
{
|
||
|
||
(void)argument; /* 未使用argument,消除警告*/
|
||
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CHASSIS;
|
||
|
||
Chassis_init(&chassis,&(task_runtime.config.config->chassis),TASK_FREQ_CHASSIS);
|
||
|
||
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);
|
||
|
||
/*底盘控制信息获取,目前dji遥控器*/
|
||
osMessageQueueGet(task_runtime.msgq.cmd.cmd_ctrl_t,&ctrl, NULL, 0);
|
||
|
||
/*锁定RTOS(实时操作系统)内核,防止任务切换,直到 osKernelUnlock() 被调用*/
|
||
osKernelLock();
|
||
|
||
/*更新电机反馈 */
|
||
Chassis_UpdateFeedback(&chassis, &can);
|
||
|
||
/*底盘控制*/
|
||
Chassis_Control(&chassis,&ctrl,&out);
|
||
|
||
/*解锁*/
|
||
osKernelUnlock();
|
||
|
||
osMessageQueueReset(task_runtime.msgq.can.output.chassis3508);//清空队列
|
||
osMessageQueuePut(task_runtime.msgq.can.output.chassis3508, &out.motor_CHASSIS3508, 0, 0); //发送数据
|
||
|
||
osMessageQueueReset(task_runtime.msgq.can.output.pitch6020);
|
||
osMessageQueuePut(task_runtime.msgq.can.output.pitch6020, &out.pitch6020, 0, 0);
|
||
|
||
osMessageQueueReset(task_runtime.msgq.can.output.pitch6020 );
|
||
osMessageQueuePut(task_runtime.msgq.can.output.pitch6020 , &out.pitch6020, 0, 0);
|
||
|
||
vofa_send[0] = chassis.vofa_send[0];
|
||
vofa_send[1] = chassis.vofa_send[1];
|
||
vofa_send[2] = chassis.vofa_send[2];
|
||
vofa_send[3] = chassis.vofa_send[3];
|
||
vofa_send[4] = chassis.vofa_send[4];
|
||
vofa_send[5] = chassis.vofa_send[5];
|
||
vofa_send[6] = chassis.vofa_send[6];
|
||
vofa_send[7] = chassis.vofa_send[7];
|
||
|
||
vofa_tx_main(vofa_send);
|
||
tick += delay_tick;
|
||
osDelayUntil(tick);
|
||
|
||
}
|
||
|
||
}
|