IWDG 延后启动改走宏改名(L3→L2):生成调用变空操作,重生成后不再需要手工删
This commit is contained in:
@@ -62,22 +62,22 @@ BASELINE = os.path.join(REPO, ".cubemx_survival_baseline.json")
|
||||
|
||||
CHECKS = [
|
||||
# ---------------- P0:开机死循环防线 ----------------
|
||||
# ⚠ 这一项是**生成区内的手工改动**(无 USER CODE 区可用):
|
||||
# 需要改的是 `hiwdg.Init.*` 赋值与 `HAL_IWDG_Init()` 调用之间的位置,
|
||||
# 而 CubeMX 只在该调用**之前**(IWDG_Init 0/1)和**之后**(IWDG_Init 2)
|
||||
# 生成标记区——正中间没有。塞进 IWDG_Init 1 区也不能阻止区外那行被覆盖
|
||||
# (另见 `usr init 1` 区的注释)。
|
||||
# 故本项按"文件整体 + 特征串"检查,并靠一个稳定锚点注释定位。
|
||||
# ✅ 2026-10-09 由 L3 升级为 L2:不再删生成区那句 `HAL_IWDG_Init(&hiwdg)`,
|
||||
# 而是在 `USER CODE BEGIN 0` 里放一个空实现 + `#define HAL_IWDG_Init(a_h)
|
||||
# iwdg_deferred_start(a_h)`,把本编译单元里那句生成调用改名到空实现。
|
||||
# → 生成区保持原样、重生成**零 diff**,不必再手工删那一句。
|
||||
# ⚠ "反初始化"不可行:IWDG 启动后无法停止(唯一手段是复位),故只能拦截启动本身。
|
||||
# 判据用区内的代码符号(protected 项会剥掉注释再比对,锚点注释不能当断言)。
|
||||
dict(
|
||||
id="iwdg-defer-start",
|
||||
kind="wholefile",
|
||||
kind="protected",
|
||||
path="Src/iwdg.c",
|
||||
must_contain=["IWDG-DEFER-START-ANCHOR"], # 手工锚点注释,重生成后会消失
|
||||
must_not_contain=["HAL_IWDG_Init(&hiwdg)"], # 真实调用不得存在
|
||||
region="0",
|
||||
must_contain=["iwdg_deferred_start", "#define HAL_IWDG_Init"],
|
||||
severity="FAIL",
|
||||
hint="MX_IWDG_Init() 不得调 HAL_IWDG_Init()(内部立即启动,"
|
||||
"而它跑在 app_main_init 之前 → 开机必复位)。启动移交 task_wd_start()。"
|
||||
"恢复后补回 `IWDG-DEFER-START-ANCHOR` 锚点注释。",
|
||||
hint="MX_IWDG_Init() 不得真正启动 IWDG(HAL_IWDG_Init 内部立即启动,而它跑在 "
|
||||
"app_main_init 之前 → 开机必复位)。现由 `USER CODE BEGIN 0` 的空实现 + 宏改名"
|
||||
"拦截,启动移交 task_wd_start();丢了宏 = 启动段看门狗就跑起来 = 开机死循环。",
|
||||
),
|
||||
# ---------------- P1:崩溃可观测性 ----------------
|
||||
# ⚠ 2026-09-29 重要变更:CubeMX 把本文件的中断函数模板**换了一代**——
|
||||
|
||||
Reference in New Issue
Block a user