0

我每 5 秒从 TTL 设备接收一次数据。我正在使用 Raspbian(如 Debian),因为我有一个 Raspberry Pi。通过使用 Cutecom 模拟器,我收到了这些:

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.45,Dw=10.19,VCC=3.85V)

5秒后

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.49,Dw=10.21,VCC=3.85V)

等等

我正在尝试使用代码块在 C 中实现这一点。我有一个打开串行端口的函数、一个配置函数和一个读取缓冲区的以下函数。我只对 2 个循环使用了 for 循环。

int learn_port(int fd)
{
   int n;
 for (int x = 0; x<2; x++)
 {
  char buff[300];
  memset(buff, 0, sizeof(buff));
  n=read(fd,buff,300);
  printf("%s\n", buff);
 }
}

现在,我的问题是我每 5 秒就有 3 个结果,比如

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.45,Dw=10.19,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.49,Dw=10.21,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.49,Dw=10.21,VCC=3.85V)

5秒后

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.52,Dw=10.22,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.52,Dw=10.22,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.52,Dw=10.22,VCC=3.85V)

我的第一个想法是改变缓冲区的大小。仅使其与第一行的大小相似。它可以工作,但有时设备会向我发送更多字符,然后我的结果很糟糕。我该怎么做才能将这 3 个结果/5 秒分离为 1 个结果/5 秒,就像 Cutecom 的结果一样?如果您需要更多详细信息,我可以发送给您。

4

1 回答 1

1

我的猜测:您不检查来自read.

是否会read在第二次和第三次循环中不返回任何内容,但缓冲区仍包含旧数据?

于 2013-05-31T14:19:11.873 回答