【问题标题】:Using cantools generated C files使用 cantools 生成的 C 文件
【发布时间】:2019-03-29 13:37:12
【问题描述】:

我在 python 中使用 cantools 来解码从 socketcan 读取的一些 CAN 消息。在 python 中,我可以从套接字读取消息并简单地解码它:

message = can_bus.recv()
decoded_msg = db.decode_message(msg.arbitration_id, msg.data)

can_bus 是套接字,db 是 dbc 加载的文件。 现在我已经从我的 .dbc 文件开始生成了 C 文件 .h 和 .c 。如何使用自动生成的文件解码在 C 中接收到的 CAN 消息?我可以通过这种方式(在 C 中)从套接字读取消息:

nbytes = read(s, &frame, sizeof(struct can_frame));

其中 s 是套接字,而 frame 是存储接收到的帧的位置。 如何使用 .h 和 .c 自动生成的文件解码接收到的帧?

【问题讨论】:

    标签: c sockets decode can-bus auto-generate


    【解决方案1】:

    cantools 生成名为..._unpack 的函数。

    他们的第二个参数叫做src_p。这是您输入接收到的字节的位置。

    假设您使用的是 Linux 的 CAN 网络层,您的代码将类似于

    struct my_message myMessage;
    my_message_unpack(&myMessage,
                      can_frame.data,
                      can_frame.can_dlc);
    

    这将填充结构myMessage

    在大多数情况下,您必须解码此结构的各个成员,即将原始(二进制)表示转换为符号值。这可以通过使用由 cantools 生成的 ..._decode 函数来完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多