使用C

时间:2015-08-06 20:40:06

标签: c serial-port raspberry-pi embedded-linux

我试图在覆盆子pi和我的Windows PC之间建立串行通信。 在我的树莓中,我正在运行一个从串口读取的C代码。建立了两个部分之间的通信,我可以接收数据,但问题是收到的数据包不一致。例如,如果我从我的计算机发送0xAA,我在Raspberry端收到一些像0x6FFFFFAA,ans等等。我不知道这个6FFFFF来自哪里?即使使用其他数据包也会重复!任何帮助表示赞赏。

2 个答案:

答案 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进行打印。