67d26ac37a
第二次重生成验证了审计机制,并证伪了上一轮的一处假设: - 审计脚本 check_cubemx_survival.py 准确检出全部 5 处覆盖(16 项中 5 FAIL), 机制有效;Src/main.c 复位原因锁存(USER CODE BEGIN Init 区)完好, 是"USER CODE 区有效"的正向证据。 - 关键发现:CubeMX 本次换了一代中断函数模板(旧 HardFault_Handler / HardFault_Report 自造区 → 新函数体内 HardFault_IRQn 0 / W1_HardFault_IRQn 0), "生成区之外的自造标记区"同样不被保留,旧假设被证伪。 恢复方案(第二次升级): - stm32f4xx_it.c:报告实现迁入 USER CODE BEGIN 0(区名从未变过的标准保护位); Handler 本体改为生成区整函数替换,用 #define HardFault_Handler HardFault_Handler_Gen 把生成实体改名保留,链接器自动移除(.map 实证 Removing ... (2 bytes)),向量表指向手工 __asm 版(0x080001a1,18 字节)。 - iwdg.c:去掉 HAL_IWDG_Init() 调用,补 IWDG-DEFER-START-ANCHOR 锚点注释。 - FreeRTOSConfig.h:恢复 FREE_RTOS_CONFIG_HARDENING 块(两个加固宏)。 - freertos.c:补回两处任务栈中文注释(栈值未丢,.ioc 已同步)。 配套: - check_cubemx_survival.py:hardfault-handler 改 wholefile + 锚点检查; UNPROTECTED_LEGACY 清单更新。 - AGENTS.md:新增"CubeMX 换模板"与"ARMCC 内联汇编语法"两条铁律, 以及"uvprojx 被 Keil 自动改写不入库"条目。 - 看门狗设计说明.md:§10.1 补第二次重生成验证结论与模板换代发现, §10.2 L2/L3 全面改写(自造区名不可依赖)。 验证:@build 0 错误 0 警告;pre-commit 13 钩子全通过;审计 16 通过 / 2 警告 / 0 失败。
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/栈报告口径