如何在C中分离缓冲区结果



我每5秒从TTL设备接收一次数据。我使用树莓派,因为我有一个树莓派。使用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("%sn", 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的结果一样?如果你需要更多的细节,我可以发给你。

我猜:您没有检查read的返回代码。

可能是read在循环的第二次和第三次没有返回任何东西,但缓冲区仍然包含旧数据吗?

最新更新