多源文件程序

我们在编写程项目工程的时候,往往使用多个源文件,因为一个项目的代码量极高,将代码写在一个文件中难以阅读和修改,于是将各个模块和设备的代码放到其他文件中。 比如我们有一个mod_chassis.c文件,里面放我们需要用的函数:

/**
 * @brief 更新底盘的反馈信息
 *
 * @param c 包含底盘数据的结构体
 * @param can CAN设备结构体
 */
void chassis_update_feedback(chassis_t *c,
                         const motor_feedback_group_t *chassis_motor,
                         const motor_feedback_group_t *gimbal_motor) {
  /* 底盘数据和CAN结构体不能为空 */
  ASSERT(c);
  ASSERT(chassis_motor);
  ASSERT(gimbal_motor);

  /* 如果yaw云台电机反装重新计算正确的反馈值 */
  c->feedback.gimbal_yaw_encoder_angle =
      gimbal_motor->as_gimbal_yaw.yaw.rotor_abs_angle;
  if (c->param->reverse.yaw)
    circle_reverse(&(c->feedback.gimbal_yaw_encoder_angle));

  /* 将CAN中的反馈数据写入到feedback中 */
  for (size_t i = 0; i < c->num_wheel; i++) {
    c->feedback.motor_rotational_speed[i] =
        chassis_motor->as_array[i].rotational_speed;
  }
}

在相应的.h文件中写上函数的声明:

void chassis_update_feedback(chassis_t *c,
                         const motor_feedback_group_t *chassis_motor,
                         const motor_feedback_group_t *gimbal_motor);

在.c文件中要含有其同名的.h文件 这样我们想要使用这个函数的时候只需要#include”文件名.h”,便可以直接调用这个函数,实现多源文件程序。 例如在thd_ctrl_chassis.c文件中:

#include "mod_chassis.h"

...

chassis_update_feedback(&chassis,  &chassis_motor,  &gimbal_motor);

...