23daa3d9ad
两件事一起做:把"没人用又已经失效"的一次性探针清掉,把"台架现场脏"这件事的口径写进文档。 **删除(5 个文件,全库零引用)**:`MDK-ARM/ftp_retr_abort_probe.py`(其职能已被 `test/host/ftp_abort_probe.py` 取代,Trap 记录引用的也是后者)与整个 `MDK-ARM/bench_diag/` (4 个诊断脚本:abort_gap / pcref / recover / sink_recycle)。删除判据三条同时成立:① 全库 `git grep` 除自身外零引用;② 自 2026-10-11 设备启用 FTP 鉴权起,脚本里写死的匿名登录必然 530 → 已经跑不动 11 天;③ 都是"跑一次拿现场"的诊断件,价值在结论而结论已沉淀进 Trap 记录。 需要时从 git 历史取回(`test/host/README.md` 与 `MDK-ARM/README.md` 都写明了这一点)。 **刻意保留并修好**:`MDK-ARM/ftp_freeze_probe.py`——它不是一次性件: `CH395F_Trap_Records.md` 拿它当"177 轮 SHA-256 全匹配"的**可信复现配方**、 `BSD_Socket_API_使用指南.md` 把它列进排障判据、`Drivers/BSP/NET/lftpd/README.md` 也指它。 删掉它等于删掉文档指定的真值工具。改为 `--user/--password`(默认出厂 admin/admin,模块常量 `FTP_USER`/`FTP_PASS`,两处登录点都读它),实测一轮:`ROUND 1 size=4096 stor=OK retr=OK hash=MATCH`、`SUMMARY pass=1 fail=0`——修前它连 530 都过不去。 **台架设备清理(不动仓库内容)**:`/` 根目录实测残留 **27 个探针文件 / 262 KB**(`AB000x`、 `A000x`、`R000x`、`SZ2K~64K`、`E12A`、`DIAG_A`、`PP0~PP4`——正是刚删的那批一次性探针留下的)。 逐个 `DELE` 后剩 `LOG` + `CONFIG.INI` + `PROT_SET.BIN` 三条目。**判据:只删显式点名的文件, 绝不 glob**;保留清单必须含 `/config.ini`(网口 + FTP 鉴权)、`/PROT_SET.BIN`(保护定值 blob, `PROT_SET_BLOB_SZ` = 176 B,删了等于定值清零)、`/log` 目录。清完两步验收:`@test` PASS (630 ms,定值巡检与配置加载都在这条链上)+ `ftp_list_fill_test.py` PASS(29 行 / 1851 B / 完成回包 226,26 个新文件全列出)。口径写进 `docs/测试说明/存储维护与容量恢复.md` 新 §4.1 (明确它是"动作 D 清文件",与 A 重建 BBT / B 全片擦除 / C 容量恢复区分——那三个会丢卷内容)。 门禁:`py_compile`(freeze 探针)通过;`check_doc_links.py --all --sections-strict` 146 文档 0 问题(删除的 5 个文件确认无任何文档引用);`check_ids.py --strict` 增量拦截通过(可判定 82.82%);`layer-deps` 通过;4 个改动文件字节卫生 BOM 无 / CR 0 / U+FFFD 0 / 无行尾空格。 本轮无固件改动,未跑 `@build`(设备侧清理后的 `@test` 已跑,镜像仍是上一笔的构建)。未推送。
66 lines
3.3 KiB
Markdown
66 lines
3.3 KiB
Markdown
# MDK-ARM/ — Keil MDK-ARM v5 工程与构建/烧录/探针脚本
|
||
|
||
> **唯一工具链**:Keil MDK-ARM v5(ARMCC,C99)。本目录含工程文件、启动文件、
|
||
> 命令行构建/烧录脚本,以及**台架探针与判读脚本**。
|
||
|
||
## 关键文件
|
||
|
||
| 文件/目录 | 作用 |
|
||
|---|---|
|
||
| `STM32F407-Demo.uvprojx` | **Keil 工程文件**(源文件清单、编译选项、目标配置) |
|
||
| `STM32F407-Demo.uvoptx` | Keil 用户选项(调试器、断点等) |
|
||
| `startup_stm32f407xx.s` | 启动文件(**`Heap_Size EQU 0x200`(512B)在此限定**) |
|
||
| `.dsh/skills/stlink-flash/scripts/stlink_flash.py` | **复位/烧录/回读**(`ST-LINK_CLI` 封装,见下;原 `reset.bat` 已于 2026-10-10 删除) |
|
||
|
||
## 构建与烧录
|
||
|
||
```bash
|
||
# 编译(@build = keil-build skill;相对路径,勿用绝对路径)
|
||
& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py # 退出码 0 = 0 errors, 0 warnings
|
||
|
||
# 烧录 + 复位运行(@download = stlink-flash skill)
|
||
& '.venv\Scripts\python.exe' .dsh\skills\stlink-flash\scripts\stlink_flash.py flash <文件.hex|.bin>
|
||
|
||
# 仅复位
|
||
& '.venv\Scripts\python.exe' .dsh\skills\stlink-flash\scripts\stlink_flash.py reset
|
||
```
|
||
|
||
### ⚠️ 烧录铁律
|
||
|
||
- `stlink_flash.py flash` = `ST-LINK_CLI -c SWD -P <文件> -Rst -Run`——**`-Rst -Run` 不可省略**!
|
||
裸 `-P` 会报 `Programming Complete`,但目标核处于异常状态时写入并不落地(芯片内容不变)
|
||
- 烧录后**必须回读校验**:`ST-LINK_CLI -c SWD -CmpFile <文件> 0x08000000`(`No difference found` 才算真写入)
|
||
- 本机 3 线接线(nRST 未接),**只重启不烧录**用 `stlink_flash.py reset`
|
||
|
||
## 台架探针与判读脚本
|
||
|
||
| 脚本 | 作用 |
|
||
|---|---|
|
||
| `bench_verdict.py` | 台架判读(把运行结果判为 PASS/FAIL) |
|
||
| `ftp_freeze_probe.py` | FTP 上传+回读哈希(真实路径冻结探针)——**被 Trap 记录当作可信判据引用,保留**;2026-10-22 起用设备账号登录(设备无匿名通道) |
|
||
| `tcp_reconnect_probe.py` | TCP 快速复连探针(TRAP-NET-17) |
|
||
| `audit_runs.py` / `audit_tcpclient.py` | 运行记录审计 / TCP 客户端审计 |
|
||
| `check_crecipe_content.py` | 检查创建配方内容 |
|
||
|
||
## 子目录
|
||
|
||
| 目录 | 内容 |
|
||
|---|---|
|
||
| `RTE/` | Keil Run-Time Environment 配置 |
|
||
| `DebugConfig/` | 调试会话配置 |
|
||
| `STM32F407-Demo/` | 构建输出(`.o`/`.axf`/`.map` 等,**产物不提交**) |
|
||
| ~~`bench_diag/`~~ | 2026-10-22 删除:4 个一次性台架诊断脚本,全库零引用、且自设备启用 FTP 鉴权起就登录不上(需要时从 git 历史取回) |
|
||
| `retracted_bench_20260922/` | 已撤回的台架数据(存证) |
|
||
|
||
## ⚠️ 注意
|
||
|
||
- 工具路径经 `DTU_*` 环境变量解析(`DTU_KEIL_UV4` = UV4.exe 完整路径,`DTU_STLINK_CLI` = ST-LINK_CLI.exe 完整路径;换机设变量即可,**无需改脚本**;契约见 `docs/环境与部署/本地工具路径环境变量方案.md`)
|
||
- 本目录被 pre-commit 门禁**排除**
|
||
- 启动文件的 `Heap_Size = 512B` 是**自研代码禁用 `malloc` 的根因**(见 `AGENTS.md`)
|
||
|
||
## 相关文档
|
||
|
||
- 烧录/复位:`docs/测试说明/ST-LINK_CLI_复位使用说明.md`
|
||
- 构建与验证:根 `AGENTS.md`「构建与验证」章
|
||
- 测试流程:`docs/测试说明/自动化测试流程.md`
|