gpt4 book ai didi

c++ - QSerialPort - setReadBufferSize

转载 作者:太空狗 更新时间:2023-10-29 23:03:26 28 4
gpt4 key购买 nike

我目前有一个问题。我正在尝试编写一个实时绘图程序。我从 Arduino 接收数据。我可以成功打开串行端口并正确读取信息并绘制图形。问题是,如果我不指定缓冲区大小,输入缓冲区将被假定为无限大(现在以 300Hz-4800Hz 读取数据,您可以想象您的计算机内存最终可能会填满,一切都会崩溃!)。

现在我尝试了类似的方法:

serial->setReadBufferSize(5000);

现在这确实成功地设置了缓冲区大小,我使用 serial->readBufferSize() 来确认它是否有效。

问题是一旦缓冲区已满,程序就会停止绘图。现在我想我应该做的是:

  1. 设置缓冲区大小(仅一次)
  2. 读取串口
  3. 绘制数据
  4. 清除缓冲区 (serial->clear())。

重复步骤 2 - 4。

但这似乎行不通。

我正在使用 QCustomPlot 进行实时绘图。

最佳答案

您可以以异步方式读取数据。只需将 QSerialPortreadyRead() 信号连接到一个插槽即可。 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com