C从另一个文件嵌入更改结构的值
C embedded change values of struct from another file
你好,我正在大学做一个小型机器人项目,我 运行 遇到了以下问题。
我在头文件中有一个名为 RoboterData 的 typedef,因为我想在多个文件中使用它。在主文件中,我有一个包含重要数据的 RoboterData 数据变量。
我的目标是从其他文件访问此数据,并能够从另一个文件获取和设置它。我想避免使用全局变量。
以下是我的方法的相关代码片段:
main.h
typedef struct {
DriveMode mode;
short sensor_left;
short sensor_mid;
short sensor_right;
int left_eng_speed;
int right_eng_speed;
} RoboterData;
main.c
# include "motors.h"
// The Data I want to get and set from other files.
RoboterData data;
// Call to a funcion defined in motors.c
drive_straight(RoboterData *data);
motors.h
void drive_straight(RoboterData *data);
motors.c
# include "main.h"
enum {
ENG_STILL = 0,
ENG_SLOW = 50,
ENG_MID = 155,
ENG_FAST = 200
}
void drive_straight(RoboterData *data) {
data ->left_eng_speed = ENG_FAST;
data ->right_eng_speed = ENG_FAST;
set_duty_cycle(LEFT_ENG, ENG_FAST);
set_duty_cycle(RIGHT_ENG, ENG_FAST);
}
当我稍后尝试通过串行端口打印出值 left_eng_speed 和 right_eng_speed 时,它保持为 0。我知道 C 是按值调用的,但是因为我正在将 ptr 传递给我的结构我传递的值是结构的地址,当我通过'->'取消引用它时,我应该能够根据我的理解访问它的原始数据而不是副本,因为我唯一复制的是地址。
如果有人能向我解释为什么这不起作用并提供可行的替代方案,我将非常感激。
// Call to a funcion defined in motors.c
drive_straight(RoboterData *data);
这是一个函数声明。它不会做任何事情。你要
drive_straight(&data);
实际调用函数。
你好,我正在大学做一个小型机器人项目,我 运行 遇到了以下问题。 我在头文件中有一个名为 RoboterData 的 typedef,因为我想在多个文件中使用它。在主文件中,我有一个包含重要数据的 RoboterData 数据变量。
我的目标是从其他文件访问此数据,并能够从另一个文件获取和设置它。我想避免使用全局变量。
以下是我的方法的相关代码片段:
main.h
typedef struct {
DriveMode mode;
short sensor_left;
short sensor_mid;
short sensor_right;
int left_eng_speed;
int right_eng_speed;
} RoboterData;
main.c
# include "motors.h"
// The Data I want to get and set from other files.
RoboterData data;
// Call to a funcion defined in motors.c
drive_straight(RoboterData *data);
motors.h
void drive_straight(RoboterData *data);
motors.c
# include "main.h"
enum {
ENG_STILL = 0,
ENG_SLOW = 50,
ENG_MID = 155,
ENG_FAST = 200
}
void drive_straight(RoboterData *data) {
data ->left_eng_speed = ENG_FAST;
data ->right_eng_speed = ENG_FAST;
set_duty_cycle(LEFT_ENG, ENG_FAST);
set_duty_cycle(RIGHT_ENG, ENG_FAST);
}
当我稍后尝试通过串行端口打印出值 left_eng_speed 和 right_eng_speed 时,它保持为 0。我知道 C 是按值调用的,但是因为我正在将 ptr 传递给我的结构我传递的值是结构的地址,当我通过'->'取消引用它时,我应该能够根据我的理解访问它的原始数据而不是副本,因为我唯一复制的是地址。
如果有人能向我解释为什么这不起作用并提供可行的替代方案,我将非常感激。
// Call to a funcion defined in motors.c
drive_straight(RoboterData *data);
这是一个函数声明。它不会做任何事情。你要
drive_straight(&data);
实际调用函数。