如何在C中复制二进制字符串。

时间:2013-05-29 17:42:46

标签: 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_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;

要找到二进制代码的地址所在的位置,我有一个像REGISTER(0xE001)这样的函数(它的类型是static volatile unsigned char * REGISTER(unsigned short address)),它返回要查看的地址。

我的主要看起来像这样:

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

    out = REGISTER(0xE001);


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

}

1 个答案:

答案 0 :(得分:2)

嵌入式的乐趣。如果您希望机器人与您通信,它必须具有某种API或注册它使用。现在,系统寄存器0xE001是它告诉你输出的地方。如果该寄存器是可读/可写的,您可以这样做:

out->capt_left = 1;

如果您通过INPUT进行通信(逻辑思考),您需要找到INPUT寄存器所在的位置。这将在您的文档中的某处。你会这样做:

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!

希望这有帮助!