在C语言中,如何在结构之间复制二进制字符串。

在C语言中,如何在结构之间复制二进制字符串。,c,struct,binary,C,Struct,Binary,我有一个可执行文件,它是一个小机器人,应该遵循一条线,我的工作是让C代码来命令它。我这里的问题是从机器人程序本身获取数据并将其发回 指令通过一个8位二进制代码传回第四个软件,我有这两种结构来处理数据 typedef struct { unsigned speed:4; unsigned inv_right_wheel:1; unsigned right_wheel:1; unsigned inv_left_wheel:1; unsigned left_wh

我有一个可执行文件,它是一个小机器人,应该遵循一条线,我的工作是让C代码来命令它。我这里的问题是从机器人程序本身获取数据并将其发回

指令通过一个8位二进制代码传回第四个软件,我有这两种结构来处理数据

typedef struct
{
    unsigned speed:4;
    unsigned inv_right_wheel:1;
    unsigned right_wheel:1;
    unsigned inv_left_wheel:1;
    unsigned left_wheel:1;
} INPUT;

typedef struct
{
    unsigned char unused:2;
    unsigned char capt_left:1;
    unsigned char capt_right:1;
    unsigned char cont_back_right:1;
    unsigned char cont_front_right:1;
    unsigned char cont_back_left:1;
    unsigned char cont_front_left:1;
} OUTPUT;
为了找到二进制代码的地址,我有一个类似于寄存器(0xE001)的小函数(它的类型是一个
静态易失性无符号字符*寄存器(无符号短地址)
),它返回要查找的地址

我的主要观点如下:

int main() { 
    OUTPUT  *out;
    INPUT   *in;

    out = REGISTER(0xE001);


    printf("%d", out.capt_left);
    return EXIT_SUCCESS;

}

嵌入式乐趣。如果你想让机器人与你通信,它必须有某种API或它使用的寄存器。现在,系统寄存器0xE001将告诉您有关输出的信息。如果此寄存器可读/写,则可以执行以下操作:

out->capt_left = 1;
如果您通过输入进行通信(逻辑上这样认为),则需要找到输入寄存器所在的位置。这将在您的文档中的某个地方。你会这样做:

in = (REGISTER(0xE000));   // Guessing on Register location.
in->speed = 1;
...
这能让你知道从哪里开始吗?顺便说一句,您很可能希望一次将整个字节写入输入,以便:

INPUT buffer;

buffer.speed = 1;
buffer.inv_right_wheel = 0;
...

*in = buffer;
甚至:

*(REGISTER(INPUT_REGISTER)) = 0x4F;  // Speed to 4, all other bits set true - maybe depending on bitfield order!

希望这有帮助

什么不起作用?该代码甚至不会编译-
out
是一个指针,所以至少你需要
out->capt\u left
。你能详细说明一下“无法让任何东西工作”部分吗?代码是否编译?你在编译时有错误吗?如果调试器运行,您会看到什么?编辑注:使用位字段可能会以眼泪告终。谢谢@mattfillips。我过去也做过类似的事情,所以我想我知道他来自哪里:)