始终获得读取超时

时间:2016-03-22 20:40:41

标签: c++ libserial

我目前正在尝试通过串口使PIC32UBL Qt / Linux / Mac端口正常工作。到目前为止,我总是在阅读串口时获得超时。

这是完整的PIC32UBL-qt开源项目。

我正在使用/dev/ttyUSB0作为串口,此适配器已经过测试。我还验证了目标电路正在使用逻辑分析仪接收/发送数据到主机程序(PIC32UBL-qt)。它也完全适用于Windows版本的PIC32UBL。

缺陷部分位于comport.cpp:156

unsigned short CComPort::ReadComPort(char* buffer, int MaxLen)
{
  if (serialPort != NULL)
  {
    SerialPort::DataBuffer dataBuffer;

    // Added a catch for timeouts
    try
    {
      serialPort->Read(dataBuffer, MaxLen,10);

      std::copy(dataBuffer.begin(), dataBuffer.end(), buffer);
    }
    catch(std::exception &e)
    {

    }

    return dataBuffer.size();
  }
  return 0;
}

所以Read总是抛出超时,尝试不同的时间(100,1000):总是超时,也尝试无限(0):永远不会离开。

问题可能与libserial正在使用信号处理程序并且我正在使用串行/ usb FTDI适配器有关吗?

1 个答案:

答案 0 :(得分:1)

根据chux的评论,我通过一次只读一个字符进行测试,并且它运行良好,这是程序中方法的最终版本:

unsigned short CComPort::ReadComPort(char* buffer, int MaxLen)
{
  if (serialPort != NULL)
  {
    int nCount = 0;

    while(serialPort->IsDataAvailable() && nCount < MaxLen)
    {
      buffer[nCount++] = serialPort->ReadByte(10);
    }

    return nCount;
  }

  return 0;
}