fix(V4B): V4.36.43 — 修正 V4.36.42 引入的离开变慢 (G3 计时器递减位置错误)

用户反馈: 烧 V4.36.42 后离开 3、4 秒才释放。

定位(46µH/113kHz 日志): 4 次离开全是 Car_OFF(band_timeout), 延迟 3.5~4.7s; RLN 正常
(有车态 = Origin−41, 说明 G1 生效、100ms 自激已消失) ⇒ 问题出在"正常释放路径被挡住"。

根因: G3 的 g_rel_hold_tick-- 误放 if(!loop1_VD_FLAG) 无车分支(原 :1308) ⇒ 有车期间永不递减
⇒ 首次 Car_In 后常驻 30 ⇒ g_rel_hold_tick==0 永假 ⇒ 正常释放被永久挡住, 只能等 2.5s 环带兜底
+ 平滑值抬升 ⇒ 3.5~4.7s。

修复: 倒计时移到 } else { 有车分支顶部 (TaskLoop.c:1531 后、#if USE_FLATNESS_EXIT 之前,
每 tick 必过且在释放判定之前); 误放旧行改注释留痕。REL_MIN_HOLD_TICKS 仍 30(300ms)。

单测: 8/8 全绿(场景 7 语义不变); 新增"镜像能力边界"警告 —— 镜像只验证算法语义, 验证不了固件内
执行路径/放置位置, 此类问题必须靠日志 Car_OFF 原因字段(band_timeout/FLAT/普通)暴露。
文档: devlog V2.80(+条目) / spec 头 V2.62 / manual 表 V2.19 / cmcng.h 4.36.42→4.36.43 REV 43
/ 分析稿 §13 返工记录。
待现场: 离开延迟回到 ~300ms 内; 缓慢接近/停边界仍不跳。
This commit is contained in:
wangfq
2026-09-11 17:06:05 +08:00
parent 0f8a0d6fbd
commit 6c82bf61b8
7 changed files with 50 additions and 5 deletions
+12
View File
@@ -192,6 +192,18 @@ EMA 更新窗 = 无车 + `dev ∈ ±4×dlt``1302-1326`)。把板拿到感
**G3 权衡(现场可选调)**:300ms 最小保持会让**真实车辆离开时的释放**最多晚 300ms(对存在型/流量计数无影响;若做速度估计或需要更快的释放沿,可把 `REL_MIN_HOLD_TICKS` 降到 10=100ms)。
## 13. 返工记录:V4.36.42 的 G3 放置错误(V4.36.43 修正)
现象:烧 V4.36.42 后**离开 3、4 秒才释放**;日志 4 次 `Car_OFF` **全是 `band_timeout`**(环带兜底),延迟 3.5~4.7s`RLN` 正常(有车态 = `Origin41`)⇒ G1 目标达成(100ms 自激消失),但正常释放从未命中。
根因:`g_rel_hold_tick--` 被放进 **`if (!loop1_VD_FLAG)`(无车)分支**(原 `:1308`)⇒ 有车期间永不递减 ⇒ 首次 `Car_In` 后常驻 30 ⇒ `g_rel_hold_tick == 0` 永假 ⇒ 正常释放被永久挡住。
修正:移到 **`} else {`(有车)分支顶部**`:1531` 后、`#if USE_FLATNESS_EXIT` 之前,每 tick 必过且在释放判定之前)。
**教训(已同步进单测注释与 skill)**
1. 镜像单测只验证**算法语义**,**验证不了固件内执行路径/位置**(计数器在哪个分支递减、是否每 tick 必过)⇒ 这类错误必须靠**日志的原因字段**(`Car_OFF(band_timeout)` / `Car_OFF_FLAT` / 普通)暴露。
2. 凡是"进入后 N 秒/N tick 生效"的守卫,实现后**先查递减调用点是否在每 tick 必经路径上**,再上板。
## 附:相关历史(devlog
| 版本 | 内容 |