fix: vTaskDelay 10→50ms 对齐 DLD154V4B 原始设计, 创建 docs/devlog.md
loop_task_function 主循环周期修正: - 原值 10ms 是 FreeRTOS 移植时的疏忽 - 改为 50ms 对齐原始 TMR15 5ms×10 设计 - 基线更新: 100×10ms=1s → 100×50ms=5s (Origin 更稳定) - CPU 占用降低 5× 创建 docs/devlog.md 记录 V2.0~V2.2 全部改动。
This commit is contained in:
52
vd960Loop/docs/devlog.md
Normal file
52
vd960Loop/docs/devlog.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# vd960Loop 开发日志
|
||||||
|
|
||||||
|
> MCU: AT32F421 (Cortex-M4, 120MHz) | 线圈通道: 4路 | 调试口: TTL Tx (3.3V 9600 8N1)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-06-26 — 多项可配置化改造
|
||||||
|
|
||||||
|
### 1. 上报频率从 raw CAPVD 改为实际线圈频率
|
||||||
|
|
||||||
|
`uart_report_packet_loop_acs` 和 `CMD_DBN_GET_MCJQ_PARAM` 中,频率字段原来直接上报 `loop_CAPVD`(IIR 累加值),现改为经过公式转换的实际频率:
|
||||||
|
|
||||||
|
```c
|
||||||
|
freq = (sclk_freq × input_div × LPCNT) / CAPVD
|
||||||
|
```
|
||||||
|
|
||||||
|
使用 `uint64_t` 先乘后除避免整数截断,`LPCNT>0 && CAPVD>0` 防除零。
|
||||||
|
|
||||||
|
### 2. 有限存在时长可配置 (hold_time)
|
||||||
|
|
||||||
|
- `Loop154_Unit` 新增 `uint16_t hold_time` 字段
|
||||||
|
- `storage.c` 从 `exist_mode` 计算: `hold_time = exist_mode × 20 × 5`(tick 数,每 tick 50ms)
|
||||||
|
- `vd1_task_per_channel` 判定有车时: 若 `hold_time > 0` 则 `loop_VD_HOLD = 1`,启用有限存在计时
|
||||||
|
- `TMR15_GLOBAL_IRQHandler`: `Hold_CNT > unit->hold_time` 替代固定 `HOLD_TIME`
|
||||||
|
- 超时后执行通道完整重启(`LC_Reset=1, loop_INI_LOOP=1`),相当于线圈重启重建基线,避免继电器释放后立即重新吸合
|
||||||
|
- `exist_mode=0` 时不启用有限存在,兼容无限制存在场景
|
||||||
|
|
||||||
|
### 3. 离开延时可配置 (relay_delay)
|
||||||
|
|
||||||
|
- `Loop154_Unit` 新增 `uint16_t relay_delay` 字段
|
||||||
|
- `storage.c` 从 `delay_time` 计算: `relay_delay = delay_time × 2`(tick 数)
|
||||||
|
- `TMR15_GLOBAL_IRQHandler`: `OUTCNT > unit->relay_delay` 替代固定 `OUT_DELAY`
|
||||||
|
|
||||||
|
### 4. vTaskDelay 修正: 10ms → 50ms
|
||||||
|
|
||||||
|
`loop_task_function` 的主循环 `vTaskDelay` 从 `10ms` 改为 `50ms`,对齐 DLD154V4B 原始设计(TMR15 5ms×10)。
|
||||||
|
|
||||||
|
**影响:**
|
||||||
|
- 基线更新周期: 100×10ms=1s → 100×50ms=5s(对齐原始设计,Origin 更稳定)
|
||||||
|
- CPU 占用: 主循环轮询频率降低 5×,节省 CPU
|
||||||
|
|
||||||
|
**原因:** TMR3 ISR ~1ms 产出一个 CAP_OK 样本,50ms 内有 ~50 个样本。`vd1_task_per_channel` 每个 tick 只取最新一个做 IIR,10ms 轮询时 CAP_OK 总是 ready,改为 50ms 不影响有效测量速率——采集由 TMR3 ISR 硬件驱动,基线更新速率受 `vd1_task` tick 限制。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 修订记录
|
||||||
|
|
||||||
|
| 版本 | 时间 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| V2.2 | 2026-06-26 | vTaskDelay 10→50ms 对齐原始设计 |
|
||||||
|
| V2.1 | 2026-06-26 | hold_time/relay_delay 可配置,有限存在完整重启 |
|
||||||
|
| V2.0 | 2026-06-26 | 频率上报 CAPVD→实际频率转换 |
|
||||||
@@ -640,7 +640,7 @@ void loop_task_function(void *pvParameters)
|
|||||||
}
|
}
|
||||||
|
|
||||||
wdt_feed();
|
wdt_feed();
|
||||||
vTaskDelay(10);
|
vTaskDelay(50); // 50ms tick,对齐 DLD154V4B 原始设计 (TMR15 5ms×10)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user