总是读取超时
Always get read timeout
我目前正在尝试使 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 适配器有关?
根据 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;
}
我目前正在尝试使 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 适配器有关?
根据 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;
}