【发布时间】:2018-07-11 05:49:21
【问题描述】:
我正在创建一个工具来使用连接到微控制器的 PCAN 加密狗来解析 CAN 消息。我在 Qt 5.10 中使用 QCanBus 库。
- 有多个 CAN 总线连接,我有一个 QThread 用于接收和解析 QCanBusDevice::framesReceived 信号上的消息。
- 并行使用 PCAN View 我可以看到微控制器报告的 CAN 数据变化不会立即反映在我的工具中。接收队列似乎仍在被清空,即我的工具无法像微控制器发送它们一样快地解析和存储 CAN 消息数据。
- 我只需要关注 CAN 上报告的最新值 - 如果我尝试在 qDebug() 上打印消息的有效负载,我可以看到我的工具正在解析旧数据,这似乎仍在清空接收队列。
有没有办法在不断开 QCanBusDevice 的情况下刷新接收队列? 如果我断开连接并再次连接,我可以获取网络上的最新数据。
【问题讨论】:
-
所以也许在每个
readFrame()之前检查framesAvailable(),如果有太多则不经处理就全部读取以清除队列? -
问题是队列受到保护并且是 QCanBusDevice 库的一部分。他们没有提供任何 API 来刷新或清除 QVector:这是链接:ReadFrame():code.woboq.org/qt5/qtserialbus/src/serialbus/… 有一个 QVector 传入帧,除非我断开设备连接,否则我无法刷新。
-
反复调用
readFrame()丢弃结果太慢了? -
是的,因为我的微控制器抛出的消息量很大 - readFrame() 跟不上。我获得更新数据之间的时间延迟呈指数增长。
-
再想一想,你认为我可以复制和粘贴 QCanBusDevice.cpp 和 QCanBusDevice.h 文件并进行修改吗?
标签: c++ qt buffer flush can-bus