4 个 Fault Handler 迁入 USER CODE BEGIN 0(L3→L2):生成区恢复 CubeMX 原样,重生成零 diff
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled

This commit is contained in:
2026-10-10 02:01:14 +08:00
parent e2e1d0fd42
commit 29df7bf8fb
6 changed files with 117 additions and 113 deletions
+15 -19
View File
@@ -83,38 +83,34 @@ CHECKS = [
# ⚠ 2026-09-29 重要变更:CubeMX 把本文件的中断函数模板**换了一代**——
# 旧模板在函数前后给自造区(HardFault_Handler / HardFault_Report),
# 新模板改成函数体**内部**的 `HardFault_IRQn 0` / `W1_HardFault_IRQn 0`。
# 实测"生成区之外的自造标记区"**不会被保留**。故现在的落点是:
# Handler 实体 → 生成区内整函数替换(无 USER CODE 位可用),
# 靠 `HARD-FAULT-ANCHOR` 锚点注释检出丢失;
# 生成实体用 `#define HardFault_Handler HardFault_Handler_Gen`
# 改名保留,链接器自动移除(map 已验证 2 bytes removed)
# 报告实现 → `USER CODE BEGIN 0`(生成区内的标准保护位,重生成不丢)
# 实测"生成区之外的自造标记区"**不会被保留**。
# ✅ 2026-10-09 落点升级为 L2(与 iwdg 同一招):4 个 `__asm` Handler 与报告实现
# 全部放 `USER CODE BEGIN 0`(标准保护位),生成区恢复 CubeMX 原样;
# 生成实体靠 `#define X X_Gen` 改名让位(未被引用 → 链接器自动移除)。
# ⚠ 顺序硬约束:我们的定义必须在 4 个 `#define` **之前**,否则被自己的宏改名。
# 判据用区内的代码符号(protected 项比对前会剥掉注释,锚点注释不能当断言)。
dict(
id="hardfault-handler",
kind="wholefile",
kind="protected",
path="Src/stm32f4xx_it.c",
region="0",
must_contain=[
"HARD-FAULT-ANCHOR", # 手工锚点注释,重生成后会消失
"__asm void HardFault_Handler", # 手工汇编 Handler
"__asm void HardFault_Handler", # 手工汇编 Handler(取 MSP/PSP)
"fault_entry_hard", # 跳转目标(C 侧带故障名)
"#define HardFault_Handler HardFault_Handler_Gen", # 给生成实体让位
],
must_not_contain=["HardFault_Handler(void)\r\n{\r\n while (1)"],
hint="HardFault_Handler 须为手工汇编版(取 MSP/PSP 交 fault_entry_hard),"
"生成实体改名 HardFault_Handler_Gen。被打回空 while(1) 后死机将完全静默。"
"恢复后补回 `HARD-FAULT-ANCHOR` 锚点注释。",
"恢复位置 = `USER CODE BEGIN 0`,且必须在 4 个 #define 之前。",
),
# ⚠ 2026-09-29:MemManage / BusFault / UsageFault 三个也升级为崩溃采集。
# 模板形态与 HardFault 相同(整函数重写、函数体外无标记区)→ 同一套方案:
# 生成区整函数替换 + 独立锚点 + `#define X X_Gen` 改名保留生成实体。
# 由一项统一检查(同文件、同 kind),避免 4 条重复项。
# MemManage / BusFault / UsageFault 三个同样升级为崩溃采集(同文件、同方案,
# 由一项统一检查,避免 3 条重复项)。
dict(
id="fault-handlers-3",
kind="wholefile",
kind="protected",
path="Src/stm32f4xx_it.c",
region="0",
must_contain=[
"MEMFAULT-ANCHOR",
"BUSFAULT-ANCHOR",
"USAGEFAULT-ANCHOR",
"__asm void MemManage_Handler",
"__asm void BusFault_Handler",
"__asm void UsageFault_Handler",