c++ - 关于C++的问题

标签 c++ arrays serial-communication

这对你们中的一些人来说可能很简单。

我正在查看以下串行读取函数,但我不太理解 &prefix[2] 在这里做了什么。是说只能填两个字节还是别的?

我还应该提到这是播放器/舞台平台的一部分。

while (1)
{
  cnt = 0;
  while (cnt != 1)
  {
    if ((cnt += read(fd, &prefix[2], 1)) < 0)
    {
      perror("Error reading packet header from robot connection: P2OSPacket():Receive():read():");
      return (1);
    }
  }

  if (prefix[0] == 0xFA && prefix[1] == 0xFB)
  {
    break;
  }

  GlobalTime->GetTimeDouble(&timestamp);

  prefix[0] = prefix[1];
  prefix[1] = prefix[2];

}

最佳答案

这个片段实现了一个大小为 3 的移位寄存器。

最旧的值在 prefix[0] 中,最新的在 prefix[2] 中。这就是 prefix[2] 的地址被传递给函数 read() 的原因。

循环离开,当前两个字节已经是FA FB时,当前(最后接收到的)字节在prefix[2]中。如果无法读取任何内容(read 的返回值不同于 1),则该函数会保留在该点之前。

当您无法预测是否在同步字符 FA FB 前面接收到其他字节时,使用此移位寄存器。每次读取操作读取三个字节将不允许同步数据流中的某处。

关于c++ - 关于C++的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910196/

相关文章:

c++ - 如果我抛出一个字符串文字,我应该捕获什么类型?

c++ - 如何自动将qwidget保存为图像

arrays - 括号问题和使用 sqlplus 和 Shell 脚本声明数组

c++ - 使用小型二维数组会导致堆栈溢出(main 之前的段错误)?

c - Modbus RTU 从站未响应 Modbus RTU 主站

c++ - 打开 COM 端口时调试断言失败

c++ - 设置 Xcode 和 FLTK

arrays - 在 Julia 中将 Vector 转换为 Matrix 的最佳方法?

linux中的php串口通信

c++ - 在C++中,编译-std = c++ 0x需要什么?