From c77c5824f9327bb48f7a788283d5fea1fa776586 Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Sat, 10 Oct 2026 16:23:54 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E5=88=A0=E9=99=A4=20MDK-ARM/build.bat?= =?UTF-8?q?=EF=BC=8C@build=20=E5=AE=8C=E5=85=A8=E6=94=B6=E6=95=9B=E5=88=B0?= =?UTF-8?q?=20keil-build=20skill?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test/run_all_suites.py 是唯一真正执行它的地方:BUILD_BAT 常量改为 KEIL_BUILD(.dsh/skills/keil-build/scripts/keil_build.py);两处构建点 改传 --timeout(脚本内超时先于 _run 超时触发,超时得 rc=1 + BUILD_FAIL 文案,而不是被 _run 杀掉) - AGENTS.md / keil-build SKILL.md / new-machine-setup SKILL.md:删除 "等价原生入口"口径,改为注明该文件已于 2026-10-10 删除 - 环境与部署 3 篇 / 项目架构总览 / README / MDK-ARM/README / download.bat 注释 / check_mem_numbers.py 提示串:移除 build.bat 引用 - 刻意未改:docs/问题记录/项目审查与优化建议报告.md 的 P2-14 / N-18 (历史审计条目;doc-links 不校验裸文件名,保留不影响门禁) - 验证:keil_build.py --timeout 300 -> BUILD_OK / rc=0; run_all_suites.py --dry-run 正确解析 skill 路径;doc-links 123 文档通过 --- .dsh/skills/keil-build/SKILL.md | 6 +- .dsh/skills/keil-build/scripts/keil_build.py | 2 +- .dsh/skills/new-machine-setup/SKILL.md | 2 +- AGENTS.md | 2 +- MDK-ARM/README.md | 1 - MDK-ARM/build.bat | 63 -------------------- MDK-ARM/download.bat | 4 +- README.md | 5 +- docs/架构设计/项目架构总览.md | 2 +- docs/环境与部署/本地工具路径环境变量方案.md | 2 +- docs/环境与部署/项目部署环境要求.md | 8 +-- scripts/check_mem_numbers.py | 2 +- test/run_all_suites.py | 15 +++-- 13 files changed, 26 insertions(+), 88 deletions(-) delete mode 100644 MDK-ARM/build.bat diff --git a/.dsh/skills/keil-build/SKILL.md b/.dsh/skills/keil-build/SKILL.md index 24033943..048386a7 100644 --- a/.dsh/skills/keil-build/SKILL.md +++ b/.dsh/skills/keil-build/SKILL.md @@ -24,9 +24,9 @@ whenToUse: 需要编译 Keil MDK 工程、验证代码改动是否 0 错误 0 **`@build` = 本 skill**(2026-10-10 起为仓库文档口径):在仓库根目录跑 `& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py`。 -仓库原生入口 `& "MDK-ARM\build.bat"` 与本 skill 判定口径一致 -(先删旧日志 → `-b -j0 -o` → 无 `error:` 且含 `0 Error(s), 0 Warning(s)`), -**等价可用**,但它无超时保护、UV4 只认 `DTU_KEIL_UV4`、失败时 dump 整份日志 → 默认走本 skill。 +判定口径(与原 `MDK-ARM/build.bat` 同款;该文件已于 2026-10-10 删除,本 skill 即 `@build`): +先删旧日志 → `-b -j0 -o` → 无 `error:` 且含 `0 Error(s), 0 Warning(s)`。 +本 skill 另有超时保护、UV4 多级解析链(含 PATH 兜底)、失败只打报错行。 环境变量 `DTU_KEIL_UV4`(用户级,指向 UV4.exe)。 ## 铁律与陷阱(实测教训) diff --git a/.dsh/skills/keil-build/scripts/keil_build.py b/.dsh/skills/keil-build/scripts/keil_build.py index c4045cf3..a11ea3f7 100644 --- a/.dsh/skills/keil-build/scripts/keil_build.py +++ b/.dsh/skills/keil-build/scripts/keil_build.py @@ -13,7 +13,7 @@ (环境变量**显式设了但路径无效 = 立即报错,不静默回退**) 日志 --log > 档案 "build_log" > <工程目录>\\build_log.txt -判定口径(与仓库 build.bat 一致,实测教训沉淀): +判定口径(实测教训沉淀;原仓库 MDK-ARM/build.bat 已删除,本脚本即 @build): 1. 先删旧日志——UV4 -o 只在真跑了构建才写日志,残留旧日志会被当成本次结果 2. UV4 单实例:IDE 开着时 -b 可能被转发给 IDE(退出码丢失)→ 只 WARN 不杀进程 3. PASS = 日志存在 + 无 "error:"(大小写不敏感)+ 含 "0 Error(s), 0 Warning(s)" diff --git a/.dsh/skills/new-machine-setup/SKILL.md b/.dsh/skills/new-machine-setup/SKILL.md index 305d8ea0..53b90272 100644 --- a/.dsh/skills/new-machine-setup/SKILL.md +++ b/.dsh/skills/new-machine-setup/SKILL.md @@ -40,7 +40,7 @@ whenToUse: 换新机器/新克隆要把环境搭起来、构建或烧录报"环 ## 实测坑(本会话两次撞上) - **agent/服务派生的 shell 不继承"服务启动之后"设置的用户级环境变量**: - `keil_build.py`(或等价的 `build.bat`)报 exit 2 先分清"真没设"还是"没继承"——查 + `keil_build.py` 报 exit 2 先分清"真没设"还是"没继承"——查 `[Environment]::GetEnvironmentVariable('DTU_KEIL_UV4','User')`,有值就 `$env:DTU_KEIL_UV4 = <该值>` 注入当前会话再跑,别急着让用户重设。 (`env_check.py` 对这种情况报 WARN 并给注入命令。) diff --git a/AGENTS.md b/AGENTS.md index c12e0f66..b9ef9889 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,7 +15,7 @@ STM32F407ZGTx @168MHz(HSE 8MHz → PLL M=4/N=168/P=2);**仅 Keil MDK-ARM v ## 构建与验证 -- `@build` = **`keil-build` skill**:`& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py`(仓库根目录执行;纯标准库,任意 python3 亦可)。退出码 0 = 0 错误 0 警告(PASS)、1 = 构建失败(打印报错行)、2 = UV4 未找到/无效、3 = 用法错误。UV4 解析链 `--uv4` > `.serialtest/config.json` 的 `uv4` > `$DSH_KEIL_UV4` > `$DTU_KEIL_UV4` > PATH(**显式设了但无效 = 立即报错、不静默回退**);日志 `MDK-ARM/build_log.txt`。**仓库原生入口 `& "MDK-ARM\build.bat"` 判定口径完全一致(先删旧日志 → `-b -j0 -o` → 无 `error:` 且含 `0 Error(s), 0 Warning(s)`),等价可用**——但它无超时保护、UV4 只认 `DTU_KEIL_UV4`、失败时 dump 整份日志,故默认走 skill。换机必设 `DTU_KEIL_UV4`,见 `docs/环境与部署/本地工具路径环境变量方案.md` +- `@build` = **`keil-build` skill**:`& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py`(仓库根目录执行;纯标准库,任意 python3 亦可)。退出码 0 = 0 错误 0 警告(PASS)、1 = 构建失败(打印报错行)、2 = UV4 未找到/无效、3 = 用法错误。UV4 解析链 `--uv4` > `.serialtest/config.json` 的 `uv4` > `$DSH_KEIL_UV4` > `$DTU_KEIL_UV4` > PATH(**显式设了但无效 = 立即报错、不静默回退**);日志 `MDK-ARM/build_log.txt`。⚠ **原 `MDK-ARM/build.bat` 已于 2026-10-10 删除**(判定口径同款,但无超时保护、UV4 只认 `DTU_KEIL_UV4`、失败时 dump 整份日志);`test/run_all_suites.py` 已改调本 skill。换机必设 `DTU_KEIL_UV4`,见 `docs/环境与部署/本地工具路径环境变量方案.md` - `@test` / `.dsh/skills/serial-boot-test/scripts/run_boot_test.py` 一键闭环(2026-09-20 起为纯 Python 标准库实现,替代 PowerShell 版;`& '.venv\Scripts\python.exe' .dsh/skills/serial-boot-test/scripts/run_boot_test.py`):开串口+清日志 → 烧录(`MDK-ARM/download.bat`,下载后 Reset&Run;快路径 `--flash-cmd "MDK-ARM\reset.bat flash"`)→ **固件身份戳**(从刚烧进去的 hex 里抠 `fw build: