feat(V4B): V4.31 — 故障补偿时序再调: 预判2s + 补偿7s (总恢复 ~15s)
V4.30 基础上现场手感再收紧: ENV_WARN_WAIT 300→200(2s); ENV_RESYNC_WAIT 800→700(7s); 恢复确认 200(2s) 不变 时序: 2s 黄灯预判锁存 → 7s 进入学习 → 6s 学完原子替换 → 2s 确认灭 test_env_resync.c 同步 → 5 场景 ALL PASS (warn@200, applied@1300, 灭@1500) 文档: devlog V2.29 / spec V2.10 / design doc v0.8
This commit is contained in:
+18
-18
@@ -1,13 +1,13 @@
|
||||
/*
|
||||
* test_env_resync.c — 环境重校准(受控基线更新) gcc 隔离单测 (DLD154V4B V4.30)
|
||||
* test_env_resync.c — 环境重校准(受控基线更新) gcc 隔离单测 (DLD154V4B V4.31)
|
||||
*
|
||||
* 镜像 = TaskLoop.c vd1_task() 无车段 dev>0 分支 (V4.24/25/26/30), 逻辑与固件一致:
|
||||
* 镜像 = TaskLoop.c vd1_task() 无车段 dev>0 分支 (V4.24/25/26/30/31), 逻辑与固件一致:
|
||||
* - 高位 dev>+4dlt: 等待确认(g_env_wait_cnt) → 满 ENV_WARN_WAIT 预判锁存 g_env_warn
|
||||
* - 满 ENV_RESYNC_WAIT → 进入学习 g_env_resync(高位段才计数; 压线/回摆=搁置)
|
||||
* - 学习: 200 样本/窗, 窗均值漂移 ≤0.1% 连续 2 窗 → env_resync_apply 原子替换
|
||||
* - 预算 ENV_LEARN_MAX_TICKS 超时 → abort 不污染
|
||||
* - 非高位空闲 dev>-dlt 连续 ENV_RECOVER_WAIT → 清 g_env_warn (黄灯灭)
|
||||
* V4.30 拍板: 预判 3s + 补偿 8s + 替换后空闲 2s 灭
|
||||
* V4.31 拍板: 预判 2s + 补偿 7s + 替换后空闲 2s 灭
|
||||
* 镜像宏与固件一致(改 ENV_* 时同步此处!)
|
||||
*/
|
||||
#include <stdio.h>
|
||||
@@ -17,9 +17,9 @@
|
||||
#include <stdint.h>
|
||||
|
||||
/* ===== 镜像固件宏 (TaskLoop.c/TaskLoop.h 同步) ===== */
|
||||
#define ENV_WARN_WAIT 300 /* V4.30: 预判 3s */
|
||||
#define ENV_WARN_WAIT 200 /* V4.31: 预判 2s */
|
||||
#define ENV_RECOVER_WAIT 200 /* V4.30: 替换后空闲 2s 恢复确认 */
|
||||
#define ENV_RESYNC_WAIT 800 /* V4.30: 补偿(学习等待) 8s */
|
||||
#define ENV_RESYNC_WAIT 700 /* V4.31: 补偿(学习等待) 7s */
|
||||
#define ENV_LEARN_WINDOW 200
|
||||
#define ENV_LEARN_MAX_TICKS 3000
|
||||
#define STABLE_ORIGIN_PPT 1
|
||||
@@ -164,7 +164,7 @@ static void reset_all(void)
|
||||
sim_tick_cnt = 0;
|
||||
}
|
||||
|
||||
/* ===== 场景 1: 永久变化 (A 拿走) — 3s 预判 → 8s 触发 → 3窗学完 ~14s 替换 → +2s 灭 ===== */
|
||||
/* ===== 场景 1: 永久变化 (A 拿走) — 2s 预判 → 7s 触发 → 3窗学完 ~13s 替换 → +2s 灭 ===== */
|
||||
static void test_permanent_change_recovers(void)
|
||||
{
|
||||
int tick, warn_at = 0;
|
||||
@@ -179,9 +179,9 @@ static void test_permanent_change_recovers(void)
|
||||
if (sim_applied_cnt)
|
||||
break;
|
||||
}
|
||||
printf("1. 永久变化: warn_at=%d learn_start=%d applied_at=%d Origin=%u (期望 300 / 1 / ~1400 / 128856)\n",
|
||||
printf("1. 永久变化: warn_at=%d learn_start=%d applied_at=%d Origin=%u (期望 200 / 1 / ~1300 / 128856)\n",
|
||||
warn_at, sim_learn_start_cnt, (int)sim_tick_cnt, sim_Origin);
|
||||
assert(warn_at == 300);
|
||||
assert(warn_at == 200);
|
||||
assert(sim_learn_start_cnt == 1);
|
||||
assert(sim_applied_cnt == 1);
|
||||
assert(sim_Origin == 128856UL);
|
||||
@@ -204,11 +204,11 @@ static void test_transient_keeps_warn(void)
|
||||
int loop;
|
||||
|
||||
reset_all();
|
||||
for (loop = 0; loop < 700; loop++) { /* 7s 高位 */
|
||||
for (loop = 0; loop < 600; loop++) { /* 6s 高位 */
|
||||
sim_CAPVD = 128856UL;
|
||||
sim_tick();
|
||||
}
|
||||
printf("2. 瞬态 7s 高位: warn=%d learn=%d (期望 1 / 0)\n", g_env_warn, sim_learn_start_cnt);
|
||||
printf("2. 瞬态 6s 高位: warn=%d learn=%d (期望 1 / 0)\n", g_env_warn, sim_learn_start_cnt);
|
||||
assert(env_warn_active() == 1);
|
||||
assert(sim_learn_start_cnt == 0);
|
||||
|
||||
@@ -226,14 +226,14 @@ static void test_transient_keeps_warn(void)
|
||||
assert(g_env_warn == 0);
|
||||
assert(sim_learn_start_cnt == 0);
|
||||
|
||||
for (loop = 0; loop < 700; loop++) { /* 再 7s 高位 → 重新锁存, 仍不学 */
|
||||
for (loop = 0; loop < 600; loop++) { /* 再 6s 高位 → 重新锁存, 仍不学 */
|
||||
sim_CAPVD = 128856UL;
|
||||
sim_tick();
|
||||
}
|
||||
printf(" 二次 7s 高位: warn=%d learn=%d (期望 1 / 0)\n", g_env_warn, sim_learn_start_cnt);
|
||||
printf(" 二次 6s 高位: warn=%d learn=%d (期望 1 / 0)\n", g_env_warn, sim_learn_start_cnt);
|
||||
assert(g_env_warn == 1);
|
||||
assert(sim_learn_start_cnt == 0);
|
||||
printf("2. 瞬态高位(<8s)不学, 锁存保持, 恢复确认后灭 OK\n");
|
||||
printf("2. 瞬态高位(<7s)不学, 锁存保持, 恢复确认后灭 OK\n");
|
||||
}
|
||||
|
||||
/* ===== 场景 3: 学习期目标压线 = 搁置(不退出) → 走后再学完 → 替换 ===== */
|
||||
@@ -243,7 +243,7 @@ static void test_interrupted_learn_recomputes(void)
|
||||
int applied_at = 0;
|
||||
|
||||
reset_all();
|
||||
for (loop = 0; loop < 800; loop++) { /* 8s → 学习开始 */
|
||||
for (loop = 0; loop < 700; loop++) { /* 7s → 学习开始 */
|
||||
sim_CAPVD = 128856UL;
|
||||
sim_tick();
|
||||
}
|
||||
@@ -287,7 +287,7 @@ static void test_unstable_learn_gives_up(void)
|
||||
int i;
|
||||
|
||||
reset_all();
|
||||
for (loop = 0; loop < 800; loop++) {
|
||||
for (loop = 0; loop < 700; loop++) {
|
||||
sim_CAPVD = 128856UL;
|
||||
sim_tick();
|
||||
}
|
||||
@@ -314,7 +314,7 @@ static void test_no_repeat_learn(void)
|
||||
int loop;
|
||||
|
||||
reset_all();
|
||||
for (loop = 0; loop < 800; loop++) {
|
||||
for (loop = 0; loop < 700; loop++) {
|
||||
sim_CAPVD = 128856UL;
|
||||
sim_tick();
|
||||
}
|
||||
@@ -343,12 +343,12 @@ static void test_no_repeat_learn(void)
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("test_env_resync (V4.30: 预判3s/补偿8s/恢复2s)\n");
|
||||
printf("test_env_resync (V4.31: 预判2s/补偿7s/恢复2s)\n");
|
||||
test_permanent_change_recovers();
|
||||
test_transient_keeps_warn();
|
||||
test_interrupted_learn_recomputes();
|
||||
test_unstable_learn_gives_up();
|
||||
test_no_repeat_learn();
|
||||
printf("ALL PASS (ENV_WARN 300 / RESYNC 800 / RECOVER 200)\n");
|
||||
printf("ALL PASS (ENV_WARN 200 / RESYNC 700 / RECOVER 200)\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user