feat(canfd): 切换 CANFD 接收为中断驱动和环形缓冲机制
- 将 CANFD 接收机制由轮询改为 FIFO0 的中断事件驱动处理 - 实现循环取空硬件 FIFO0,提高接收效率和响应速度 - 引入环形缓冲区缓存接收帧,支持多路通道多帧队列管理 - 置位解析任务标志位,实现接收数据的异步解析 - 增加接收中断统计,包括 FIFO 满和溢出计数 - 重构临界区代码,使用自定义函数保护中断状态 - 修改接收过滤器配置,支持按掩码匹配标准帧进入 FIFO0 - 使能 CAN FIFO0 多种中断标志,包括非空、满和溢出中断
This commit is contained in:
@@ -153,7 +153,8 @@
|
||||
**当前任务节拍划分:**
|
||||
- 500us:采样 VREF 原始值
|
||||
- 1ms:采样温度原始值 + 计算工程值
|
||||
- 10ms:CAN 接收轮询 + 接收解析
|
||||
- CAN RX 中断:置位接收解析任务,主循环按预算尽快消费
|
||||
- 10ms:保留系统 10ms 节拍计数
|
||||
- 100ms:CAN 发送准备 + CAN 发送 + 状态灯任务
|
||||
- 1s:心跳任务 + 诊断打印任务
|
||||
|
||||
@@ -323,20 +324,20 @@
|
||||
### `device/CANFD.cpp`
|
||||
**作用:**
|
||||
- 初始化 CANFD 工作模式
|
||||
- 轮询接收 FIFO
|
||||
- 缓存接收帧
|
||||
- RX0 中断批量搬空硬件 FIFO0
|
||||
- 按通道缓存接收帧
|
||||
- 构建状态发送帧
|
||||
- 发送准备好的 FD 帧
|
||||
- 维护 CANFD 诊断统计信息
|
||||
|
||||
**内部拆分特点:**
|
||||
- RX 和 TX 已拆成两段式
|
||||
- 接收侧:`poll -> cache -> consume`
|
||||
- 接收侧:`rx interrupt -> queue -> consume`
|
||||
- 发送侧:`prepare -> send`
|
||||
|
||||
**当前内部缓存:**
|
||||
- `g_rx_frame`:单帧接收缓存
|
||||
- `g_tx_buffer`:待发送帧缓存
|
||||
- `s_rxQueues`:三路接收环形缓冲
|
||||
- `s_txQueues`:三路待发送环形缓冲
|
||||
- `g_can_diag`:收发与错误统计
|
||||
|
||||
这是当前最重要的通信模块之一。
|
||||
@@ -497,11 +498,11 @@ main.cpp
|
||||
- `main` 已瘦身
|
||||
- 任务管理与任务执行已分离
|
||||
- CANFD 收发流程已拆成两段式
|
||||
- CANFD 接收已切换为中断事件驱动和环形缓冲
|
||||
- ADC / 温度 / 定时器 / 串口 已模块化
|
||||
|
||||
### 当前仍可继续演进的方向
|
||||
- 将 `task_runner.cpp` 再拆成 `task_adc.cpp / task_can.cpp / task_diag.cpp`
|
||||
- 将 CANFD 单帧缓存升级为轻量环形缓冲
|
||||
- 将协议帧定义抽到单独文件中
|
||||
- 完善状态灯任务与心跳任务
|
||||
|
||||
|
||||
Reference in New Issue
Block a user