From 50f316a5f2dcd3c0a272a50c522d1a2ee20ca58f Mon Sep 17 00:00:00 2001 From: cxh Date: Thu, 12 Jun 2025 15:29:22 +0800 Subject: [PATCH] Auto commit at 2025-06-12 15:29:22 --- src/mc/src/can_driver.cpp | 7 +++++++ src/mc/src/mc.cpp | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mc/src/can_driver.cpp b/src/mc/src/can_driver.cpp index d6d4ffb..219ed83 100644 --- a/src/mc/src/can_driver.cpp +++ b/src/mc/src/can_driver.cpp @@ -167,6 +167,13 @@ void CANDriver::receiveThreadFunc() frame.ext = rec[i].ExternFlag != 0; frame.rtr = rec[i].RemoteFlag != 0; frame.dlc = rec[i].DataLen; + + if (frame.dlc > 8) + { + std::cerr << "Invalid CAN data length: " << (int)frame.dlc << std::endl; + frame.dlc = 8; // 或跳过此帧 + } + std::memcpy(frame.data, rec[i].Data, frame.dlc); callback(frame, userData); } diff --git a/src/mc/src/mc.cpp b/src/mc/src/mc.cpp index 2eb81ba..fd9c3bd 100644 --- a/src/mc/src/mc.cpp +++ b/src/mc/src/mc.cpp @@ -95,7 +95,9 @@ void receiveHandler(const CANFrame &frame, void *userData) auto msg = sweeperMsg::CanFrame(); msg.id = frame.id; msg.dlc = frame.dlc; - msg.data.assign(frame.data, frame.data + frame.dlc); + size_t len = frame.dlc <= 8 ? frame.dlc : 8; + msg.data.assign(frame.data, frame.data + len); + publisher->publish(msg); // 根据开关决定是否打印 CAN 消息