一、前言:CAN 协议栈的灵魂是什么?
在车载、工业控制、机器人等嵌入式系统中,
CAN 协议栈(CAN protocol stack) 是通信的神经中枢。
它的职责是:
-
管理帧(Frame);
-
解析信号(Signal);
-
分发消息(Message);
-
驱动硬件收发器。
而这一切,都建立在一个核心能力之上:
👉 用 C 指针在多层数据结构之间穿梭。
二、CAN 协议栈的结构简图
让我们先看 CAN 栈的逻辑分层:
┌────────────────────────────┐
│ 应用层 (Application) │ ← 用户逻辑、信号解析
├────────────────────────────┤
│ 网络层 (Network Layer) │ ← PDU、消息缓冲、调度
├────────────────────────────┤
│ 数据链路层 (Data Link) │ ← CAN ID、DLC、数据域
├────────────────────────────┤
│ 驱动层 (Driver / HAL) │ ← 硬件寄存器、发送/接收缓冲
└────────────────────────────┘
在这些层之间,数据的流动靠的就是——
指针传递、指针偏移、函数指针回调。
三、指针让“帧”成为“流动的对象”
在 CAN 栈中,一帧消息(CAN Frame)通常是这样定义的:
typedef struct {
uint32_t id;
uint8_t dlc;
uint8_t data[8];
} CanFrame;

最低0.47元/天 解锁文章

926

被折叠的 条评论
为什么被折叠?



