# 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]` 水位生成**每任务最坏链**报告 | ## 使用方式 ```bash # 全库跑门禁 & '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,按原样回写(本仓库各文件换行混杂) - **受管区锚点**:改文档中的数值/表格时用 `` 锚点,只替换锚点内内容 - 脚本**输出文件绝不能落在自身扫描范围内**(否则会"自我污染",见 `docs-tree-reorg` skill) - 生成器与校验器**共用同一套正则/口径**,避免两处数字打架 ## 相关文档 - `docs/代码规范/pre-commit使用说明.md` — 门禁完整说明与排除项 - `docs/代码规范/cppcheck使用说明.md` - `docs/文档规范.md` — 文档门禁三档 - `docs/内存管理/RAM使用分析与优化方案.md` — RAM/栈报告口径