e3eaa111fe098de16cc227c78bab5647c5df5e13
根因(非平台推测的环形缓冲/event_report队列):
mqtt_publish 的 mqttBuf=512B < loop_data(4通道)604B
→ MQTTSerialize_publish 返回 -2 不写 buf
→ len 为 uint32_t, -2 变 42.9亿
→ WCHNET 把清零缓冲+越界相邻全局(temp_guide=report_config→report_c)
当 520B 垃圾包发出 → broker 见非法类型0x00 RST → 重连风暴
修复(net_srv.c):
- MAX_MQTTBUF_LEN 512→1024 (容纳 604B loop_data)
- mqtt_publish: len uint32→int + 守卫 if(len<=0)return (序列化失败绝不发残缓冲)
- keepalive 9→60 (报告建议, 9s过激)
event_report 协议违规修复(iot_mqtt_srv.c):
- 重连重发保持原 msg_id/ts (V1.04 §5.3-2), 不再作废换号致平台去重失效
验证: tests/test_mqtt_publish_overflow.c 复现旧垃圾包+验证守卫/大缓冲;
tests/test_event_report.c T8 断言重连同 msg_id. 均全过.
遗留: ts=上电秒数非Unix时间戳, 待定方案(设备无RTC/SNTP)
Refs: docs/incidents/2026-07-15-DC045A49718F-protocol-error.md
vd_960 — 车检器 DLD960 嵌入式软件
产品概述
DLD960 是一款双 MCU 架构的车检器(车辆检测器),采用线圈检测原理。
硬件架构
| 芯片 | 型号 | 主频 | Flash | SRAM | 职责 |
|---|---|---|---|---|---|
| 线圈 MCU | AT32F421 | 120MHz | 64KB | 16KB | 四路线圈信号采集与处理 |
| 通信 MCU | CH32V208 | 144MHz | 128KB | 64KB | 蓝牙、网口、1路 RS485 |
两个 MCU 之间通过内部总线(UART/SPI)通信。
子项目
| 子项目 | 目录 | MCU | 功能 |
|---|---|---|---|
| vd960Loop | vd960Loop/ |
AT32F421 | 线圈驱动、频率采样、车辆检测算法 |
| vd960DBN | vd960DBN/ |
CH32V208 | 蓝牙管理、TCP/IP 协议栈、RS485 通信 |
开发环境
- vd960Loop: Keil MDK / AT32 IDE(ARM Cortex-M4)
- vd960DBN: MounRiver Studio(RISC-V)
Releases
4
vd960DBN V1.02.05(DBN 单侧发布)
Latest
Languages
C
98.1%
Python
0.9%
Assembly
0.6%
CMake
0.2%
Linker Script
0.2%