【问题标题】:QCanBusDevice Bufffer FlushingQCanBusDevice 缓冲区刷新
【发布时间】:2018-07-11 05:49:21
【问题描述】:

我正在创建一个工具来使用连接到微控制器的 PCAN 加密狗来解析 CAN 消息。我在 Qt 5.10 中使用 QCanBus 库。

  1. 有多个 CAN 总线连接,我有一个 QThread 用于接收和解析 QCanBusDevice::framesReceived 信号上的消息。
  2. 并行使用 PCAN View 我可以看到微控制器报告的 CAN 数据变化不会立即反映在我的工具中。接收队列似乎仍在被清空,即我的工具无法像微控制器发送它们一样快地解析和存储 CAN 消息数据。
  3. 我只需要关注 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


【解决方案1】:

Qt 5.12 版已包含 clearFrames()。我必须使用我需要的更改从源代码构建 Qt。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多