7a18d2ce28
背景:.ioc 的 KeepUserCode 只保护 USER CODE 标记区,标记之外的手工改动 重生成即被覆盖,且多数不报编译错(2026-09-29 实测一次覆盖 4 处,含 HardFault_Handler 崩溃采集被打回空 while(1)、两个 FreeRTOS 加固宏被删)。 新增 scripts/check_cubemx_survival.py: - 16 项易失清单(IWDG 延后启动 / 崩溃采集 / 栈溢出检测 / 堆失败钩子 / 断言改造 / 看门狗模块与工程挂载 / 复位原因锁存 / HAL 驱动与使能 / .ioc 关键项),断言前剥掉 C 注释防误报 - 哈希基线漂移检测(.cubemx_survival_baseline.json),--write 重建 - 标记区外存量以 WARN 提示(3 个 Fault 处理函数、栈注释) 已挂 pre-commit cubemx-survival 钩子(改动 .ioc / Src / Inc / task_watchdog / .uvprojx 时触发)。 文档:看门狗设计说明 §10.2 新增"重生成不丢的三层手段"方法论 (L1 写 .ioc > L2 搬进 USER CODE 区(可自造标记区)> L3 审计兜底) 及 .ioc / USER CODE 区可用位置 / 存量清单三张对照表;AGENTS.md 平台约束 新增该规则;pre-commit 使用说明 §2.12 新增钩子详解。 门禁:build 0 错误 0 警告;pre-commit 全通过。
scripts/ — 开发脚本(提交门禁 + 报告生成)
本目录是 pre-commit 门禁脚本与报告生成脚本的存放处。 与
tools/(面向开发者的功能工具)区别:本目录服务于质量门禁与工程度量。
文件一览
提交门禁(接入 .pre-commit-config.yaml)
| 脚本 | 钩子名 | 作用 |
|---|---|---|
check_coding_standard.py |
C coding standard |
C 代码规范机械检查(命名前缀/常量右置/头文件保护宏等) |
check_mojibake.py |
Forbid U+FFFD mojibake |
扫描 U+FFFD 乱码(EF BF BD 字节) |
check_doc_links.py |
doc-links |
文档链接存在性 + 命名规范(D-3/D-7) |
gen_task_table.py |
task-table |
FreeRTOS 任务表以 Src/freertos.c 为唯一事实源生成/校验(D-2/D-7) |
check_mem_numbers.py |
mem-numbers |
内存/Flash 数字以 .map 为唯一事实源校验(D-7 体积档) |
报告生成(非门禁)
| 脚本 | 作用 |
|---|---|
ram_report.py |
从 .map 生成静态 RAM/Flash 占用报告(→ docs/内存管理/data/) |
stack_report.py |
从 Keil 静态调用图 + 串口 [STACK] 水位生成每任务最坏链报告 |
使用方式
# 全库跑门禁
& 'C:\ProgramData\anaconda3\python.exe' -m pre_commit run --all-files
# 单个脚本
& '.venv\Scripts\python.exe' scripts/check_doc_links.py --all
& '.venv\Scripts\python.exe' scripts/gen_task_table.py --check # 或 --write / --diff
& '.venv\Scripts\python.exe' scripts/check_mem_numbers.py --check
& '.venv\Scripts\python.exe' scripts/ram_report.py
& '.venv\Scripts\python.exe' scripts/stack_report.py -s tools\serial_tool\state\serial.log
⚠️ 脚本编写约定
- 保真回写:改文件前先探测原换行符(LF/CRLF)与 BOM,按原样回写(本仓库各文件换行混杂)
- 受管区锚点:改文档中的数值/表格时用
<!-- XXX:BEGIN/END -->锚点,只替换锚点内内容 - 脚本输出文件绝不能落在自身扫描范围内(否则会"自我污染",见
docs-tree-reorgskill) - 生成器与校验器共用同一套正则/口径,避免两处数字打架
相关文档
docs/代码规范/pre-commit使用说明.md— 门禁完整说明与排除项docs/代码规范/cppcheck使用说明.mddocs/文档规范.md— 文档门禁三档docs/内存管理/RAM使用分析与优化方案.md— RAM/栈报告口径