void can_msg_send_task(void const *argu) { osEvent event; memset(&motor_cur, 0, sizeof(motor_current_t)); for(;;) { event = osSignalWait(GIMBAL_MOTOR_MSG_SEND | \ CHASSIS_MOTOR_MSG_SEND | \ SHOOT_MOTOR_MSG_SEND, osWaitForever); if (event.status == osEventSignal) { if (ctrl_mode == PROTECT_MODE || !lock_flag) { for(int i=0; i<4; i++) motor_cur.chassis_cur[i]= 0; for(int i=0; i<2; i++) motor_cur.gimbal_cur[i] = 0; motor_cur.trigger_cur = 0; can1_send_message(GIMBAL_CAN_TX_ID, 0, 0, 0, 0); can2_send_message(GIMBAL_CAN_TX_ID, 0, 0, 0, 0); send_chassis_msg(CAN_CHASSIS_CONTROL_ID,&hcan1,&chassis,&chassis_tx_msg); send_judge_msg(0x09,&hcan1); // can1_send_message(CHASSIS_CAN_TX_ID,0, 0, 0, 0); } else if (lock_flag) //有陀螺仪数据才给电流 { send_time++; if(send_time>=5)//send_judge_msg(0x09,&hcan1); { send_judge_msg(0x09,&hcan1); send_time=0; } if (event.value.signals & GIMBAL_MOTOR_MSG_SEND) { /* 小步兵 */ can1_send_message(GIMBAL_CAN_TX_ID, motor_cur.gimbal_cur[0], 0, 0, 0); can2_send_message(GIMBAL_CAN_TX_ID, 0, motor_cur.gimbal_cur[1], motor_cur.trigger_cur, 0); } // if (event.value.signals & CHASSIS_MOTOR_MSG_SEND) // { // //can1_send_message(CHASSIS_CAN_TX_ID,motor_cur.chassis_cur[0], motor_cur.chassis_cur[1], motor_cur.chassis_cur[2], motor_cur.chassis_cur[3]); // send_chassis_msg(CAN_CHASSIS_CONTROL_ID,&hcan1,&chassis,&chassis_tx_msg); // } // can1_send_supercap(); } } } }
时间: 2024-04-17 08:27:26 浏览: 179
基于freeRTOS和STM32F103x的手机远程控制浴室温度系统设计源码
这段代码是一个任务函数 `can_msg_send_task`,它是一个无限循环,通过调用 `osSignalWait` 函数等待信号的触发。当接收到特定的信号后,根据不同的条件执行相应的操作。
首先,通过调用 `memset` 函数将 `motor_cur` 变量清零。然后进入无限循环。
在循环体内,调用 `osSignalWait` 函数等待三个不同的信号:`GIMBAL_MOTOR_MSG_SEND`、`CHASSIS_MOTOR_MSG_SEND`、`SHOOT_MOTOR_MSG_SEND`。这些信号的触发方式可能是其他任务发送的信号。
如果收到了信号,则判断 `ctrl_mode` 是否为 `PROTECT_MODE` 或者 `lock_flag` 是否为假。如果满足其中一个条件,将 `motor_cur` 变量中的数据清零,并发送一些特定的消息。
如果 `lock_flag` 为真,则进入 else 分支。在这个分支中,首先增加 `send_time` 计数器。当 `send_time` 达到 5 时,调用 `send_judge_msg(0x09,&hcan1)` 函数。然后根据不同的信号位设置相应的电流值,并通过 `can1_send_message` 和 `can2_send_message` 发送消息。
需要注意的是,部分代码被注释掉了,可能是因为暂时不需要或者有其他替代方案。
阅读全文