78 lines
2.6 KiB
C
78 lines
2.6 KiB
C
/*
|
||
ctrl_shoot Task
|
||
|
||
*/
|
||
|
||
/* Includes ----------------------------------------------------------------- */
|
||
#include "task/user_task.h"
|
||
/* USER INCLUDE BEGIN */
|
||
#include "device/mrobot.h"
|
||
#include "module/shoot.h"
|
||
#include "module/config.h"
|
||
/* USER INCLUDE END */
|
||
|
||
/* Private typedef ---------------------------------------------------------- */
|
||
/* Private define ----------------------------------------------------------- */
|
||
/* Private macro ------------------------------------------------------------ */
|
||
/* Private variables -------------------------------------------------------- */
|
||
/* USER STRUCT BEGIN */
|
||
Shoot_t shoot;
|
||
Shoot_CMD_t shoot_cmd;
|
||
/* USER STRUCT END */
|
||
|
||
/* Private function --------------------------------------------------------- */
|
||
/* USER PRIVATE CODE BEGIN */
|
||
|
||
/**
|
||
* @brief 发射模块数据打印回调
|
||
*/
|
||
static int print_shoot(const void *data, char *buf, size_t size) {
|
||
const Shoot_t *shoot = (const Shoot_t *)data;
|
||
return MRobot_Snprintf(buf, size,
|
||
" State : %d\r\n"
|
||
" Fric0 : %.1f rpm (target: %.1f)\r\n"
|
||
" Fric1 : %.1f rpm (target: %.1f)\r\n"
|
||
" Fric_Avg : %.1f rpm\r\n"
|
||
" Trig : %.1f rpm (angle: %.2f deg)\r\n"
|
||
" Output : Fric0=%.1f Fric1=%.1f Trig=%.1f\r\n",
|
||
shoot->running_state,
|
||
shoot->feedback.fric_rpm[0], shoot->target_variable.target_rpm,
|
||
shoot->feedback.fric_rpm[1], shoot->target_variable.target_rpm,
|
||
shoot->feedback.fric_avgrpm,
|
||
shoot->feedback.trig_rpm, shoot->feedback.trig_angle_cicle,
|
||
shoot->output.out_fric[0], shoot->output.out_fric[1], shoot->output.outagl_trig);
|
||
return 0;
|
||
}
|
||
|
||
/* USER PRIVATE CODE END */
|
||
/* Exported functions ------------------------------------------------------- */
|
||
void Task_ctrl_shoot(void *argument) {
|
||
(void)argument; /* 未使用argument,消除警告 */
|
||
|
||
|
||
/* 计算任务运行到指定频率需要等待的tick数 */
|
||
const uint32_t delay_tick = osKernelGetTickFreq() / CTRL_SHOOT_FREQ;
|
||
|
||
osDelay(CTRL_SHOOT_INIT_DELAY); /* 延时一段时间再开启任务 */
|
||
|
||
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
|
||
/* USER CODE INIT BEGIN */
|
||
|
||
Shoot_Init(&shoot,&Config_GetRobotParam()->shoot_param,CTRL_SHOOT_FREQ);
|
||
MRobot_RegisterDevice("shoot", &shoot, print_shoot);
|
||
|
||
/* USER CODE INIT END */
|
||
|
||
while (1) {
|
||
tick += delay_tick; /* 计算下一个唤醒时刻 */
|
||
/* USER CODE BEGIN */
|
||
osMessageQueueGet(task_runtime.msgq.shoot.shoot_cmd, &shoot_cmd, NULL, 0);
|
||
Shoot_UpdateFeedback(&shoot);
|
||
// Shoot_Test(&shoot);
|
||
Shoot_Control(&shoot,&shoot_cmd);
|
||
|
||
/* USER CODE END */
|
||
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
|
||
}
|
||
|
||
} |