fix(V4B): V4.36.34 — EMA 钳位自愈 + SUM/ADR 诊断 (35uH VEM 垃圾)
35uH 日志: VEM 垃圾 536M→846M→2224M 递增 (10:23:03 起)
连锁: vac_ref=垃圾 → RLN=-2070862722 → RSM 永不够 → 卡死
触发判定 vac_ref-dlt 巨大 → CAPVD=真空值假 Car_In
分析: EMA 公式限幅不可能跳5亿; 写点全正常 → 越界写, 写源未定
防御: EMA 每步限 ±3×dlt; 与 Origin 偏差>25% 自愈回 Origin
诊断: DBG 加 SUM(ORG_SUM 对照); 每 10s ADR 打 4 变量地址
语法0 error, 4测试全绿; spec V2.51 / devlog V2.69
This commit is contained in:
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.33" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.34" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define HARDWARE_VER "3.00"
|
||||
#define FIRMWARE_VER_MAIN 4
|
||||
#define FIRMWARE_VER_SUB 36
|
||||
#define FIRMWARE_VER_REV 33
|
||||
#define FIRMWARE_VER_REV 34
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -1259,11 +1259,21 @@ void vd1_task(void)
|
||||
update_moving_average(&loop1_ORG_SUM, &loop1_ORG_CNT,
|
||||
&loop1_Origin, loop1_CAPVD, _win);
|
||||
/* V4.36.31: 真空 EMA 同步更新 (同条件同守卫; α=128 τ≈1.28s) */
|
||||
if (g_vacuum_ema == 0)
|
||||
if (g_vacuum_ema == 0) {
|
||||
g_vacuum_ema = loop1_CAPVD;
|
||||
else
|
||||
g_vacuum_ema += (uint32_t)((int32_t)loop1_CAPVD - (int32_t)g_vacuum_ema)
|
||||
/ VACUUM_EMA_ALFA;
|
||||
} else {
|
||||
/* V4.36.34: EMA 钳位 — 每步最多 ±3×dlt (防 CAPVD 毛刺拖带);
|
||||
* 与 Origin 偏差 >25% 视为内存污染/失控, 自愈回 Origin (20260908 35uH 日志 VEM 垃圾实锤) */
|
||||
int32_t _ema_d = (int32_t)loop1_CAPVD - (int32_t)g_vacuum_ema;
|
||||
int32_t _ema_lim = (int32_t)(loop1_dlt_ORG * 3);
|
||||
if (_ema_d > _ema_lim) _ema_d = _ema_lim;
|
||||
else if (_ema_d < -_ema_lim) _ema_d = -_ema_lim;
|
||||
if (_ema_d != 0)
|
||||
g_vacuum_ema += (uint32_t)_ema_d / VACUUM_EMA_ALFA;
|
||||
if (((int32_t)loop1_Origin - (int32_t)g_vacuum_ema) > (int32_t)(loop1_Origin >> 2) ||
|
||||
((int32_t)g_vacuum_ema - (int32_t)loop1_Origin) > (int32_t)(loop1_Origin >> 2))
|
||||
g_vacuum_ema = loop1_Origin;
|
||||
}
|
||||
}
|
||||
} else if (dev < 0) {
|
||||
g_env_wait_cnt = 0; // V4.24: 目标靠近(车方向) → 等待重来
|
||||
@@ -1709,7 +1719,7 @@ void loop_task_function(void *pvParameters)
|
||||
_rln = vac_ref() - ((loop1_dlt_ORG * REL_BAND_LO_MULT) / 100); /* V4.36.31: 显示真空锚定线 */
|
||||
PRINT("DBG|t=%ums f=%dkHz L=%luuH Xn=%d LPCNT=%d Value=%d CAPVD=%d slow=%d "
|
||||
"Origin=%d dlt=%d SENS=%d VD=%d FRZ=%d/%d LIM=%d LOOP=%d STBL=%d "
|
||||
"QLO=%d VEM=%d RSM=%d RLN=%d RCN=%d\n",
|
||||
"QLO=%d VEM=%d RSM=%d RLN=%d RCN=%d SUM=%lu\n",
|
||||
_t_ms,
|
||||
_fk,
|
||||
coil_l_uH(_fk),
|
||||
@@ -1717,8 +1727,13 @@ void loop_task_function(void *pvParameters)
|
||||
loop1_Origin, loop1_dlt_ORG, loop1_SensLevel, loop1_VD_FLAG,
|
||||
loop1_freeze_cnt, loop1_freeze_ref, g_slope_limit_cnt,
|
||||
loop1_LOOP_OK, g_loop_stable,
|
||||
g_q_lo, g_vacuum_ema, g_rel_smooth, _rln, loop1_cnt_release);
|
||||
g_q_lo, g_vacuum_ema, g_rel_smooth, _rln, loop1_cnt_release,
|
||||
(unsigned long)loop1_ORG_SUM);
|
||||
}
|
||||
if ((_t_ms % 10000) == 0) /* V4.36.34 诊断: 关键变量地址 (每 10s) */
|
||||
PRINT("ADR|VEM=%08X ORGSUM=%08X Origin=%08X RSM=%08X\n",
|
||||
(unsigned)&g_vacuum_ema, (unsigned)&loop1_ORG_SUM,
|
||||
(unsigned)&loop1_Origin, (unsigned)&g_rel_smooth);
|
||||
g_slope_limit_cnt = 0; // 限幅计数按周期清 (统计最近 2s)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user