feat(vd960DBN): 传感快照区落地 snapshot.c + BLE SNAP_STAT/QUERY/CLEAR
- snapshot.h/c: 64B 定长 SnapRec (头部16B + 4x12B 0xC0线圈数据原样) 环形分区独立于事件日志, 快照区 = 总容量 - 固定区576KB - 事件区 - 线程模型: USART2 ISR 只打包+RAM暂存(8深满丢新), 主循环 snap_flush 落盘 (iot_sensor_ingest 在中断上下文, SPI 45ms 擦除严禁进中断) - dbn_ble_srv: SNAP_STAT(0x28)/SNAP_QUERY(0x29)/SNAP_CLEAR(0x2A) QUERY 上限 2 条 (64x2+2=130B, ODR 教训防御) - iot_mqtt_srv: ingest 挂 snap_enqueue, publish_sensor 挂 snap_flush (放在 READY 检查前, 断网照常落盘) - peripheral_main: offlog_init 后加 snap_init - 清空审计: 写事件流 log_clear payload[0]=2 - 测试: test_snapshot.c 8 例全过, offlog/ble_offlog 回归全过 - 文档: DLD960_BLE协议 V1.02 + ROADMAP P1.2 状态 + devlog
This commit is contained in:
@@ -6,6 +6,34 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-12 — 传感快照区落地(snapshot.c,BLE 新增 0x28/0x29/0x2A)
|
||||
|
||||
### 背景
|
||||
|
||||
ROADMAP P1.2 分区规划(参数区→OTA→事件日志区→传感快照区)中,事件区已落地(offlog),快照区此前为预留。本次实现快照流:0xC0 传感帧按上报节奏落盘,断网期间波形照常记录,可离线回放。
|
||||
|
||||
### 关键设计决策
|
||||
|
||||
1. **64B 定长记录 SnapRec**:头部 16B(magic=0xA6/len/flags/seq/ts_ms/boot_seq)+ 4×12B 线圈数据(与 0xC0 线上格式逐字节一致,可直接对照抓包)→ W25Q32 下 48064 条。
|
||||
2. **线程安全(踩坑预警)**:`iot_sensor_ingest()` 在 **USART2 ISR 上下文**(`loop_uart_proto.h:209` 明确标注)被调用!SPI 擦除 ~45ms 绝不能在中断里做 → 中断只打包+入 RAM 暂存(8 深,满丢新),主循环 `iot_mqtt_publish_sensor()` 每轮 `snap_flush()` 落盘。单生产者(中断)单消费者(主循环)count 计数环形,volatile 字节天然原子。
|
||||
3. **分区表同一事实来源**:快照区 = 总容量 − 固定区 576KB − 事件区(`g_offlog_part.area_size`),杜绝两模块对事件区大小理解不一致。
|
||||
4. **审计**:快照清除写事件流 `log_clear`(payload[0]=2=快照流)。
|
||||
5. **BLE 指令对齐 OFFLOG 模式**:SNAP_STAT(0x28)/SNAP_QUERY(0x29)/SNAP_CLEAR(0x2A);QUERY 上限 2 条(64×2+2=130B ≤ 单包缓冲,ODR 教训防御)。
|
||||
|
||||
### 测试
|
||||
|
||||
`test_snapshot.c` 8 例全过(中断安全/打包格式/环形回绕/掉电恢复/扇区切换/暂存满丢新/清空审计/分区表);`test_offlog` 8 例、`test_ble_offlog` 7 例回归全过。
|
||||
|
||||
> ⚠ 测试踩坑:不要在同文件 include offlog.c + snapshot.c —— 两个 .c 的 static 变量(如 `_wr_off`)在同一翻译单元**符号冲突**,快照 clear 审计会污染事件写指针。测试改为 mock `g_offlog_part` + `offlog_evt`。
|
||||
|
||||
### 待板上验证
|
||||
|
||||
- 快照区 0x110000 起、W25Q32 48064 条 capacity 打印
|
||||
- 中断风暴下暂存满丢新行为(观察点:`g_snap_drop`)
|
||||
- 掉电恢复跨扇区扫描
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-12 — BLE 分包粒度动态化修复(Too large noti 丢包)
|
||||
|
||||
### 背景
|
||||
|
||||
Reference in New Issue
Block a user