void motor_originate() { if (motor_origin_point>0) { motor_step_backward(motor_origin_point); } else if (motor_origin_point<0) { motor_step_forward(motor_origin_point); } motor_origin_set(); }
void task_motor_move(void *p_arg) { OS_ERR err; OS_MSG_SIZE size; CPU_TS ts; CMD_STRU *msg; CMD_STRU *send_msg = (CMD_STRU*)malloc(sizeof(CMD_STRU)); unsigned short msg_send[6]; unsigned short report_data[3]; report_data[0] = 0; report_data[1] = 0; report_data[2] = 0; long temp; while (1) { msg = (CMD_STRU*)OSQPend(&MoveQ, 0, OS_OPT_PEND_BLOCKING, &size, &ts, &err); switch (msg->cmd_word & 0x00ff) { case MOD_MOTOR_CMD_SET_ORIGIN: motor_origin_set(); break; case MOD_MOTOR_CMD_STEP_FORWARD: motor_reset_stop(); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_FORWARD, msg->para1, MOD_MOTOR_STATUS_MOVING); motor_step_forward(msg->para1); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_FORWARD, msg->para1, MOD_MOTOR_STATUS_STOPPING ); module_msg_dispatch(send_msg); break; case MOD_MOTOR_CMD_STEP_BACKWARD: motor_reset_stop(); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_BACKWARD, msg->para1, MOD_MOTOR_STATUS_MOVING ); module_msg_dispatch(send_msg); motor_step_backward(msg->para1); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_BACKWARD, msg->para1, MOD_MOTOR_STATUS_STOPPING); module_msg_dispatch(send_msg); break; case MOD_MOTOR_CMD_AUTO_FORWARD: motor_reset_stop(); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_FORWARD, 0, MOD_MOTOR_STATUS_MOVING); module_msg_dispatch(send_msg); temp = 0; while (1) { motor_step_forward(MOTOR_SINGLE_STEP); temp++; if (motor_check_stop()==MOTOR_STOP) { motor_reset_stop(); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_FORWARD, temp, MOD_MOTOR_STATUS_STOPPING); module_msg_dispatch(send_msg); break; } } break; case MOD_MOTOR_CMD_AUTO_BACKWARD: motor_reset_stop(); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_BACKWARD, 0, MOD_MOTOR_STATUS_MOVING); module_msg_dispatch(send_msg); temp =0; while (1) { temp++; motor_step_backward(MOTOR_SINGLE_STEP); if (motor_check_stop()==MOTOR_STOP) { motor_reset_stop(); module_msg_render(send_msg, MOD_COMM_HEAD, MOD_MOTOR_HEAD, MOD_MOTOR_STATUS_BACKWARD, temp, MOD_MOTOR_STATUS_STOPPING); module_msg_dispatch(send_msg); break; } } break; case MOD_MOTOR_CMD_ORIGINATE: motor_originate(); break; } } }