【发布时间】:2013-05-25 02:34:03
【问题描述】:
我有一个可执行文件,它是一个应该跟随一行的小机器人,我的工作是编写 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;
}
【问题讨论】:
-
什么不起作用?该代码甚至无法编译 -
out是一个指针,所以至少你需要out->capt_left。 -
您能否详细说明“无法工作”部分?代码是否编译?你有编译错误吗?如果它运行,你会在调试器下看到什么?
-
编者注:使用位域可能会以泪水告终。