我试图在覆盆子pi和我的Windows PC之间建立串行通信。 在我的树莓中,我正在运行一个从串口读取的C代码。建立了两个部分之间的通信,我可以接收数据,但问题是收到的数据包不一致。例如,如果我从我的计算机发送0xAA,我在Raspberry端收到一些像0x6FFFFFAA,ans等等。我不知道这个6FFFFF来自哪里?即使使用其他数据包也会重复!任何帮助表示赞赏。
答案 0 :(得分:1)
根据你的评论,你这样做:
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]
}
答案 1 :(得分:1)
unsigned int
大于您提供的大小1
作为read
的参数读取的字节数。因此,只有一个字节被读入unsigned int
,其余的基本上是未初始化的或剩余的数据。阅读unsigned char
,即
unsigned char x;
read(port, &x, 1);
您仍然可以像以前一样使用printf
进行打印。