One Motor 0.6.0
RoboMaster全平台一站式电机驱动库
载入中...
搜索中...
未找到
CanFrame.hpp
浏览该文件的文档.
1
7#ifndef CANFRAME_HPP
8#define CANFRAME_HPP
9#include <cstddef>
10#include <cstdint>
11#include <type_traits>
12
17#define ONE_MOTOR_CAN_MAX_DLEN 8
18
19#ifdef ONE_MOTOR_LINUX
20#include <linux/can.h>
21#else
22#include <zephyr/drivers/can.h>
23#endif
24
25
26namespace OneMotor::Can
27{
35 struct CanFrame
36 {
37 CanFrame() = default;
38 uint32_t id{};
39 uint8_t dlc{};
40 uint8_t __pad{};
41 uint8_t __res0{};
42 uint8_t len8_dlc{};
43#ifdef ONE_MOTOR_LINUX
44 uint8_t data[ONE_MOTOR_CAN_MAX_DLEN]alignas(8){};
45#else
47#endif
48 };
49#ifdef ONE_MOTOR_LINUX
50 static_assert(sizeof(CanFrame) == sizeof(can_frame),
51 "Size mismatch between CanFrame and can_frame.");
52 static_assert(alignof(CanFrame) == alignof(can_frame),
53 "Alignment mismatch between CanFrame and can_frame.");
54 static_assert(std::is_standard_layout_v<CanFrame>,
55 "CanFrame must be a standard-layout type for safe casting.");
56 static_assert(offsetof(CanFrame, id) == offsetof(can_frame, can_id),
57 "Offset mismatch for 'id' member.");
58 static_assert(offsetof(CanFrame, dlc) == offsetof(can_frame, can_dlc),
59 "Offset mismatch for 'dlc' member.");
60 static_assert(offsetof(CanFrame, data) == offsetof(can_frame, data),
61 "Offset mismatch for 'data' member.");
62#else
63 static_assert(sizeof(CanFrame) == sizeof(can_frame), "Size mismatch between CanFrame and can_frame.");
64 static_assert(alignof(CanFrame) == alignof(can_frame), "Alignment mismatch between CanFrame and can_frame.");
65 static_assert(std::is_standard_layout_v<CanFrame>, "CanFrame must be a standard-layout type for safe casting.");
66 static_assert(offsetof(CanFrame, id) == offsetof(can_frame, id), "Offset mismatch for 'id' member.");
67 static_assert(offsetof(CanFrame, dlc) == offsetof(can_frame, dlc),
68 "Offset mismatch for 'dlc' member.");
69 static_assert(offsetof(CanFrame, data) == offsetof(can_frame, data),
70 "Offset mismatch for 'data' member.");
71#endif
72}
73
74#endif //CANFRAME_HPP
#define ONE_MOTOR_CAN_MAX_DLEN
定义CAN帧数据的最大长度。
定义 CanFrame.hpp:17
uint8_t data[ONE_MOTOR_CAN_MAX_DLEN]
CAN数据负载
定义 CanFrame.hpp:46
uint8_t len8_dlc
CAN FD中真实的数据长度 (兼容普通CAN)
定义 CanFrame.hpp:42
uint8_t __res0
保留字节
定义 CanFrame.hpp:41
uint8_t dlc
数据长度码 (0-8)
定义 CanFrame.hpp:39
uint8_t __pad
填充字节,用于对齐
定义 CanFrame.hpp:40