我目前正在努力使PIC32UBL Qt/Linux/Mac端口通过串口工作。到目前为止,我总是在读取串行端口时得到超时。
下面是完整的PIC32UBL-qt开源项目。
我使用/dev/ttyUSB0作为串口,对这个适配器进行了测试。同时,用逻辑分析仪验证了目标电路正在接收/发送数据到主机程序(PIC32UBL-qt)。而且,它完全可以使用PIC32UBL的Windows版本。
有缺陷的零件在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适配器有关?
发布于 2016-03-24 15:58:16
通过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;
}https://stackoverflow.com/questions/36164766
复制相似问题