2.5 KiB
2.5 KiB
Context
目前的系统已经具备了以太网 TCP Socket 基础和 DVP+DMA 红外数据矩阵的采集能力。然而主程序目前仅仅是将 DVP 采集到的流进行无差别循环上报,没有执行复杂的预处理逻辑。
根据给定的架构设计文档 (CH32二维运行结构概览.md 与 函数调用指南.md),我们需要:
- 导入由第三方或算法工程师提供的闭源/封装好的预处理算法库 (
Preprocess_) 和底层 TCP 控制流协议封装 (TcpLogic_)。 - 废弃当前无差别的整帧暴力上传阻塞逻辑。
- 利用
TcpTxBuffer的带有 offset 缓冲池机制实现零拷贝的网络流装配上传。 - 提供上位机参数回调和错误处理功能(如通过
TcpLogic_RegisterConfigCallback和 NG 控制逻辑)。
Goals / Non-Goals
Goals:
- 在
main.c和dvp.c中成功注册、初始化并接入Preprocess_xxx与TcpLogic_xxx的 API 生命周期。 - 实现一个不产生内存额外拷贝 (Zero-Copy) 的缓冲区数据流,由预处理根据特定感兴趣区域截取有效温度点后,送入 TCP 模块利用预留位添加封包帧头发出。
- 加入上位机动态热更新配置和外部气缸硬件IO回调处理。
Non-Goals:
- 具体的红外滑窗滤波或 TCP 报文组装的底层逻辑编写(这部分属于已封装库,只做 API 调用层面的业务整合)。
Decisions
- API 包装策略: 为了避免 DVP 中断卡死主线程流,将 DVP 完成一帧(软触发)的逻辑校验放到业务主循环
main之内。DVP 中断仅仅传递Line_Ready_Flag或全局的缓冲区双指针结束标志给主循环去执行高耗时的Preprocess_CheckInternalTrigger2D操作。 - 内存池预分配模型: 在全局申请两个支持偏移量设定的发送大缓存 (
TcpTxBuffer_t) 并常驻内存,确保网络封装只需向 Buffer 首部写入 TLV 标头而无需搬运大块图像数据。 - 配置与剔除反馈同步: 所有与上位机的异步通信指令解析都由
TcpLogic完成,主程序在此阶段只需挂载好 callback 并使用volatile配置影寄存器或标志位与主循环交互即可。
Risks / Trade-offs
- [Risk] 零拷贝模型的数组越界风险 → 确保
Preprocess的目标裁断 Buffer 的尺寸 > (Target Width*Height*2 + HeadOffset) 且首字节地址分配精确。 - [Risk] DMA 和 主循环取图并发导致冲突 (Tearing) → 要求 DVP 在更新下一帧时利用乒乓机制避免同址同时写读,主逻辑处理时需进行资源锁屏。