使用C的串行通信错误
Error in serial communication using C
我正在尝试在 raspberry pi 和我的 windows PC 之间建立串行通信。
在我的树莓派中,我是 运行 一个从串行端口读取的 C 代码。两部分之间的通信已建立,我可以接收数据,但问题是接收到的数据包与发送的数据包不同。例如,如果我从我的计算机发送 0xAA,我会在 Raspberry 端收到类似 0x6FFFFFAA 之类的东西。我不知道这个 6FFFFF 是从哪里来的??它甚至与其他数据包一起重复!感谢您的帮助。
根据您的评论,您正在这样做:
unsigned int x;
...
read(port, &x,1);
这行不通,因为您正在读取一个字节,但 int
在大多数系统上至少是 2 或 4 个字节。因此 int
的一个字节包含您想要的值,但其余字节包含垃圾。
如果您一次读取一个字节的数据,您应该将 x
声明为一个 unsigned char
,即一个字节。
如果您想一次读取两个或更多字节,您需要定义一个字符数组来读入:
char buffer[size];
int count, i;
count = read(port, buffer, size);
if (count == -1) {
perror("read failed");
exit(1);
}
for (i=0;i<count;i++) {
// process buffer[i]
}
unsigned int
大于大小 1
,您将其作为要读取的字节数作为 read
的参数。因此只有一个字节被读入unsigned int
,其余的基本上是未初始化或剩余的数据。读到unsigned char
,即
unsigned char x;
read(port, &x, 1);
您仍然可以像以前一样使用 printf
打印它。
我正在尝试在 raspberry pi 和我的 windows PC 之间建立串行通信。 在我的树莓派中,我是 运行 一个从串行端口读取的 C 代码。两部分之间的通信已建立,我可以接收数据,但问题是接收到的数据包与发送的数据包不同。例如,如果我从我的计算机发送 0xAA,我会在 Raspberry 端收到类似 0x6FFFFFAA 之类的东西。我不知道这个 6FFFFF 是从哪里来的??它甚至与其他数据包一起重复!感谢您的帮助。
根据您的评论,您正在这样做:
unsigned int x;
...
read(port, &x,1);
这行不通,因为您正在读取一个字节,但 int
在大多数系统上至少是 2 或 4 个字节。因此 int
的一个字节包含您想要的值,但其余字节包含垃圾。
如果您一次读取一个字节的数据,您应该将 x
声明为一个 unsigned char
,即一个字节。
如果您想一次读取两个或更多字节,您需要定义一个字符数组来读入:
char buffer[size];
int count, i;
count = read(port, buffer, size);
if (count == -1) {
perror("read failed");
exit(1);
}
for (i=0;i<count;i++) {
// process buffer[i]
}
unsigned int
大于大小 1
,您将其作为要读取的字节数作为 read
的参数。因此只有一个字节被读入unsigned int
,其余的基本上是未初始化或剩余的数据。读到unsigned char
,即
unsigned char x;
read(port, &x, 1);
您仍然可以像以前一样使用 printf
打印它。