使用cantools生成C文件

问题描述 投票:0回答:1

我在python中使用cantool来解码从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是套接字,帧是存储接收帧的地方。如何使用.h和.c自动生成的文件解码接收到的帧?

c sockets decode can-bus auto-generate
1个回答
0
投票

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

他们的第二个参数叫做src_p。这是你输入接收字节的地方。

假设您正在使用Linux的CAN网络层,那么您的代码将是类似的

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

这将填充结构myMessage

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

© www.soinside.com 2019 - 2024. All rights reserved.