首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >总是得到读超时

总是得到读超时
EN

Stack Overflow用户
提问于 2016-03-22 20:40:41
回答 1查看 1.1K关注 0票数 1

我目前正在努力使PIC32UBL Qt/Linux/Mac端口通过串口工作。到目前为止,我总是在读取串行端口时得到超时。

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

我使用/dev/ttyUSB0作为串口,对这个适配器进行了测试。同时,用逻辑分析仪验证了目标电路正在接收/发送数据到主机程序(PIC32UBL-qt)。而且,它完全可以使用PIC32UBL的Windows版本。

有缺陷的零件在comport.cpp:156

代码语言:javascript
复制
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适配器有关?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-24 15:58:16

通过chux的评论,我一次只读一个字符进行了测试,它运行得很好,下面是程序中方法的最终版本:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36164766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档