作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前有一个问题。我正在尝试编写一个实时绘图程序。我从 Arduino 接收数据。我可以成功打开串行端口并正确读取信息并绘制图形。问题是,如果我不指定缓冲区大小,输入缓冲区将被假定为无限大(现在以 300Hz-4800Hz 读取数据,您可以想象您的计算机内存最终可能会填满,一切都会崩溃!)。
现在我尝试了类似的方法:
serial->setReadBufferSize(5000);
现在这确实成功地设置了缓冲区大小,我使用 serial->readBufferSize()
来确认它是否有效。
问题是一旦缓冲区已满,程序就会停止绘图。现在我想我应该做的是:
重复步骤 2 - 4。
但这似乎行不通。
我正在使用 QCustomPlot
进行实时绘图。
最佳答案
您可以以异步方式读取数据。只需将 QSerialPort
的 readyRead()
信号连接到一个插槽即可。 readyRead()
在新数据可用时发出:
connect(&serial, SIGNAL(readyRead()), this, SLOT(readData()));
readData()
是每次 QSerialPort
发出 readyRead()
信号时调用的槽。 readData()
将任何可用数据附加到 QByteArray
类成员。您可以在此插槽中检查是否收到了特定数量的数据:
void MyClass::readData()
{
receivedData.append(serial.readAll());
if(receivedData.count()>=5000)
{
//Plot data and remove plotted data from receivedData
}
}
关于c++ - QSerialPort - setReadBufferSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597553/
我目前有一个问题。我正在尝试编写一个实时绘图程序。我从 Arduino 接收数据。我可以成功打开串行端口并正确读取信息并绘制图形。问题是,如果我不指定缓冲区大小,输入缓冲区将被假定为无限大(现在以 3
我是一名优秀的程序员,十分优秀!