我在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 自动生成的文件解码接收到的帧?
最佳答案
cantools 生成名为 ..._unpack
的函数。
它们的第二个参数称为src_p
。这是您放置接收到的字节的地方。
假设您正在使用 Linux 的 CAN 网络层,您的代码将类似于
struct my_message myMessage;
my_message_unpack(&myMessage,
can_frame.data,
can_frame.can_dlc);
这将填充结构myMessage
。
在大多数情况下,您必须解码该结构的各个成员,即将原始(二进制)表示形式转换为符号值。这可以通过使用 cantools 生成的 ..._decode
函数来完成。
关于c - 使用cantools生成C文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55418695/