gpt4 book ai didi

c - 如何在 C 中将二进制字符串复制到结构和从结构中复制。

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:26 28 4
gpt4 key购买 nike

我有一个可执行文件,它是一个应该跟随一条线的小机器人,我的工作是编写 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;

}

最佳答案

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

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!

希望这对您有所帮助!

关于c - 如何在 C 中将二进制字符串复制到结构和从结构中复制。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820556/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com