【发布时间】:2017-09-27 21:02:44
【问题描述】:
我目前有一个问题。我正在尝试编写一个实时绘图程序。我从 Arduino 接收数据。我可以成功打开串口并正确读取信息并绘制图表。问题是,如果我不指定缓冲区大小,则假定输入缓冲区是无限的(现在以 300Hz-4800Hz 读取数据,您可以想象您的计算机内存最终可能会填满,一切都崩溃了!)。
现在我尝试了类似的方法:
serial->setReadBufferSize(5000);
现在这确实成功设置了缓冲区大小,我使用serial->readBufferSize() 确认它是否有效。
问题是一旦缓冲区满了,程序就会停止绘图。现在我想我应该做的是:
- 设置缓冲区大小(仅一次)
- 读取串口
- 绘制数据
- 清除缓冲区 (serial->clear())。
重复步骤 2 - 4。
但这似乎不起作用。
我正在使用QCustomPlot 进行实时绘图。
【问题讨论】:
-
读取串行数据会将其从缓冲区中删除。我不明白你的问题。如果您读取数据的速度快于接收数据的速度,则缓冲区不应填满。如果不是,请使用 RS232 流量控制。为什么要清除缓冲区?那只会丢弃数据。
标签: c++ qt serial-port