我是Qt和串口编程的新手。 我在rhel 7服务器上使用Qt 5.3。
我在串口上收到大小为75字节的数据包。使用QSerialPort::readAll()
函数读取数据包时,一次只读取8个字节。在检查QSerialPort::bytesAvailable()
函数时,它显示8个字节。
在Google上我发现QSerialPort::readAll()
可以一次读取512个字节。
我是否遗漏了需要明确指定的内容?
提前谢谢
答案 0 :(得分:0)
这可能是您特定串行端口FIFO缓冲区设置的问题。例如,您可以尝试在设备管理器中更改该系统设置。但是,我建议不要依赖它并连接到QSerialPort::readyRead()
信号并读取数据并将其放在用户定义的缓冲区中。
QByteArray _MyBuffer;
void MyReadHandler() {
_MyBuffer.append(readAll());
if (_MyBuffer.count() >= 75) {
// Do something with your data...
} else {
// Wait for more data...
}
}
在此插槽中,您可以等待特定数量的数据,然后再进行处理。
答案 1 :(得分:0)
通常可以通过串行编程(以及通信编程)进行部分读取。串口也很慢,并且没有"包"的概念。操作系统会在到达时为您提供字符。有一些方法可以优化这一点,但这并不能阻止您的代码和协议处理通信时间和故障。
您可能最终会得到一个带有计时器的代码,该计时器逐渐构建数据包,检查它然后对其进行处理。