refactor(注释): 把内部阶段代号 S4 与 S7 换成平实语言——查不到的代号不算可检索锚点
用户 2026-10-14 就定过这条(以后没人知道这种编码,要简单明确),这次把最后两处内部分层代号清干净: · 串口自检判据里的 S7 → 直接写自检台账联合判定;用例追溯里的 S4 → 写用例追溯校验。 · 涉及烧录编排器与日志校验器的帮助文本、两份数据目录 README 的字段说明,以及看门狗、存储维护、 实机测试、链路延迟四篇文档的同一处措辞。 判据没变,改的只是**读起来能不能查得到**:S7/S4 这类号在任何登记表里都查不到定义,注释里留着, 后来人只能靠问人——而这类内部分层代号正是当年编号失控的起点。门禁:doc-links 与 id-check 均 rc=0。
This commit is contained in:
@@ -291,7 +291,7 @@ static HAL_StatusTypeDef iwdg_deferred_start(const IWDG_HandleTypeDef *a_h) { (v
|
||||
|
||||
### 4.7 模拟器与主机侧
|
||||
|
||||
- **模拟器不编译本模块**(`simulator/` 无 `task_watchdog.c`,也无 `--watchdogtest`)——原计划的 S1 已降级,判定逻辑改由 **L0.5 主机侧单测**覆盖(39 断言,见 §7)。
|
||||
- **模拟器不编译本模块**(`simulator/` 无 `task_watchdog.c`,也无 `--watchdogtest`)——原计划的模拟器侧看门狗自检已降级,判定逻辑改由 **L0.5 主机侧单测**覆盖(39 断言,见 §7)。
|
||||
- 不可建模的部分:真实复位、LSI 漂移、`RCC_CSR` 标志——必须真机(§7)。
|
||||
|
||||
---
|
||||
|
||||
@@ -87,4 +87,4 @@ git add -f docs/测试说明/boot_log_data/20261012_B9_soe_after_post.bin
|
||||
- 沉淀约定:`../测试开发标准流程.md` §7.3
|
||||
- 栈水位探针与基线:`../../内存管理/RAM使用分析与优化方案.md` §4.0.2 / §4.0.6
|
||||
- 当前诊断基线:`../../内存管理/RAM预算台账.md`
|
||||
- 本流程立项:原 `../../任务规划/README.md` S-2(2026-09-22 提出;2026-10-05 固化为本节流程后销项)
|
||||
- 本流程立项:原 `../../任务规划/README.md` 的「启动日志固化流程」条目(2026-09-22 提出;2026-10-05 固化为本节流程后销项)
|
||||
|
||||
@@ -117,4 +117,4 @@ frame#10:first=16.522ms batches=[1024,1024,1024,137] tail_lag=+55.7ms
|
||||
|
||||
- run1~run11 为缺陷定位过程(D11~D16 见 `docs/测试说明/链路延迟测试说明.md` §6.1),其中 run10/run11 的 L7 失败、
|
||||
run9 的 170s 连接拒绝均已定位并修复;
|
||||
- 压力档(`--ftp-stress`,E-02 复现)与 `--mode remo`(生产 RemoDispBus 客户端)属 M3。
|
||||
- 压力档(`--ftp-stress` 复现)与 `--mode remo`(生产 RemoDispBus 客户端)属 M3。
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
- 这属于**动作 D(清文件)**,与本文 §1 的 A(重建 BBT + 格式化)/ B(全片擦除)/ C(容量恢复)
|
||||
都不同:A/B 会丢卷内容,D 不动文件系统结构。
|
||||
|
||||
### 4.2 自检台账清零,重建 S7 审计基线(2026-10-22 实测)
|
||||
### 4.2 自检台账清零,重建联合判定审计基线(2026-10-22 实测)
|
||||
|
||||
`@test --require-selftest-pass --selftest-scope all`(累计口径)在台架上**永远 FAIL**:
|
||||
`/log/selftest.log` 里躺着 29 条历史记录,`2026-10-10 09:24:12 → 2026-10-14 06:55:02`,
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
| **步骤 1** | 环境预检(P0-A,每次上台架必跑) | 常设 | §2 |
|
||||
| **步骤 2** | 产品 `@test` 闭环 + 自检结果判定(P0-B) | ✅ 已闭环 | §3 |
|
||||
| **步骤 3** | IWDG 故障注入 V2/V4 + 长跑 V5(P1-A) | ✅ 已闭环 | §4 |
|
||||
| **步骤 4** | 堆低水位告警实测(P1-B / S11) | ✅ 已闭环 | §5 |
|
||||
| **步骤 5** | GD5F 错误通道回归(P2-A / S9) | ✅ 已闭环 | §6 |
|
||||
| **步骤 4** | 堆低水位告警实测(P1-B) | ✅ 已闭环 | §5 |
|
||||
| **步骤 5** | GD5F 错误通道回归(P2-A) | ✅ 已闭环 | §6 |
|
||||
| **步骤 6** | 网络稳定性与基线重锁(P2-B / 日志静默观察项 + L5 队列往返基线待重验) | ◐ 部分闭环(7.1/7.2 ✅;7.3 待 PC peer) | §7 |
|
||||
| **步骤 7** | 工程卫生(P3 / S5 + S4 + 待核实项) | ✅ 已闭环 | §8 |
|
||||
| **步骤 7** | 工程卫生(P3 + 待核实项) | ✅ 已闭环 | §8 |
|
||||
|
||||
> **每步出口**:`@build` 0/0 → 一轮 `@test` PASS → ST-LINK 全片回读 `No difference found` →
|
||||
> 上游登记销项 + 文末变更记录留痕。
|
||||
@@ -46,7 +46,7 @@
|
||||
| A2 | 产品构建 0/0 | `& '.venv\Scripts\python.exe' .dsh\skills\keil-build\scripts\keil_build.py` | 末行 `BUILD_OK: 0 errors, 0 warnings` |
|
||||
| A3 | 构建产物为**产品态** | 检查 `test/board/test_config.h` L30-33 | 四个 `TEST_SUITE_*` **全部注释** |
|
||||
| A4 | `.map` 非测试态 | 看 `MDK-ARM/STM32F407-Demo/STM32F407-Demo.map` 的 `ER_IROM1` | 产品态基线随已接受的修复增长:262,100(初版)→ 262,836 B(10-02 第 1~6 轮台架)→ 264,284 B(第 7~9 轮台架)→ **264,936 B(当前,含 A2/A3/A4 补码)**;明显阶跃 ≈3.7KB 及以上(10-02 实测产品 262,836 → 套件 266,540)= 停在套件态 → 重跑 A2 |
|
||||
| A5 | 全量静态门禁 | `pre-commit run --all-files` | **17/17 Passed**(2026-10-03 实测;含新增 S5 `test-cppcheck`) |
|
||||
| A5 | 全量静态门禁 | `pre-commit run --all-files` | **17/17 Passed**(2026-10-03 实测;含新增 `test-cppcheck`) |
|
||||
| A6 | ST-LINK 探针可见 | `& '.venv\Scripts\python.exe' .dsh\skills\stlink-flash\scripts\stlink_flash.py list`(CLI 经 `DTU_STLINK_CLI` / PATH 解析) | 列出探针 SN `0B250D12A218303030303032` |
|
||||
| A7 | 串口端口正确 | 检查 `.serialtest/config.json` 的 `portName` | 端口单一配置源 = 此文件(当前 COM6,2026-09-21 台架重插后由 COM7 变更);变更后先杀旧 daemon 再 `open` |
|
||||
| A8 | 串口助手 daemon 可用 | `& '.venv\Scripts\python.exe' .dsh/skills/serial-assistant/scripts/serial_tool.py status` | 返回 JSON,`open: true/false` 可读 |
|
||||
|
||||
@@ -685,10 +685,10 @@ sock4 auto-relisten ok / relisten retry ok ← 监听器随后自行恢复
|
||||
| D2 | 3209B × 1KB 发送 FIFO 停止等待(4 次串行分块握手,期间 netTask 全程占用) | `chunk_wait` 219µs/块 ≈ SPI 搬运成本的 1/7 → 握手本身**不是瓶颈**;每帧固定成本小(MCU 净 7.1ms) | 基线成本,可接受;根治 = 差量/RLE + 帧版本号(待办) |
|
||||
| D3 | netMsgQueue 头阻塞 | 已量化:一条空闲 FTP 控制连接冻结全网 17.7s | **两阶段闭环**:① 5ms 分片有界读 + 让出(f8d6e90/4a1605b,缓解)② **挂起 recv 化**(`a45c0cb`,结构性——执行器零占用,缺陷类消灭,§8.3 要点 4) |
|
||||
| D4 | PC 端延迟 ACK 与"每段等 ACK"停止等待交互 | `--ack-fast` 带内实验证实:关掉延迟 ACK 尾批自行消失(52→3.9ms) | **已客户端侧解决**(生产客户端关延迟 ACK/轻推兜底,§7.4) |
|
||||
| D5 | uiTask 节拍:10ms 循环 + 每拍一次 64B recv + step 在 poll 前 | `ui_loop` 10986µs ≈ 设计值(渲染 ~1ms);拾取调度 ~2.3ms(P0-b 删 per-recv 日志后,原 ~6.8ms) | 基线行为;可选优化 S7(poll 前置 + while 排空),低优先 |
|
||||
| D5 | uiTask 节拍:10ms 循环 + 每拍一次 64B recv + step 在 poll 前 | `ui_loop` 10986µs ≈ 设计值(渲染 ~1ms);拾取调度 ~2.3ms(P0-b 删 per-recv 日志后,原 ~6.8ms) | 基线行为;可选优化(poll 前置 + while 排空),低优先 |
|
||||
| D6 | 阻塞式日志在关键路径(fputc 逐字节 @115200) | `logtax_line` 4402µs/行;per-recv 日志已删(2026-09-22):`queue_rt_recv` 5997→1223µs、帧周期 66.0→61.6ms、首字节 13.9→9.6ms | **部分已修(P0-b,2026-09-22)**;非阻塞日志仍待办(同时是开机日志并发丢行 §9.2 的根治项) |
|
||||
| D7 | 物理链路:强制 100M 全双工 vs 交换机自协商 → 双工不匹配静默丢包 | 台架 `PHY: 100M FULL` 成立、零尖峰 → 台架干净 | 现场排查项:核对开机日志 PHY 行 + 交换机端口强制全双工 + 验证 PC 有线直连 |
|
||||
| D8 | 客户端固定成本:100ms 拉取节拍、按键后不立即取帧、1bpp→PNG→base64→WS 编码链 | 生产客户端优化后:帧耗时 20.7ms、显示帧率 ~9fps | 部分已优化(延迟确认抑制已上线);其余待办 S9(按键后立即取帧/不传 PNG/自适应节拍)——客户端仓库 |
|
||||
| D8 | 客户端固定成本:100ms 拉取节拍、按键后不立即取帧、1bpp→PNG→base64→WS 编码链 | 生产客户端优化后:帧耗时 20.7ms、显示帧率 ~9fps | 部分已优化(延迟确认抑制已上线);其余待办(按键后立即取帧/不传 PNG/自适应节拍)——客户端仓库 |
|
||||
|
||||
### 10.2 待办优化项(按性价比排序,均未实施)
|
||||
|
||||
@@ -697,15 +697,15 @@ sock4 auto-relisten ok / relisten retry ok ← 监听器随后自行恢复
|
||||
(实测该状态对 SET 类命令无判别力,见 §10.1 D1);全套件复验零回归(§6.2/§6.3);验收完成后探针已移除;
|
||||
3. **~~P0-b~~ 已实施(2026-09-22)**:删除 `net_socket.c` per-recv `DBG_INFO`;实测 `queue_rt_recv` −80%
|
||||
(5997→1223µs)、生产帧周期 −4.4ms(66.0→61.6ms)、首字节 −4.3ms(13.9→9.6ms);
|
||||
4. **S1** 超时参数分档:`NET_SEND/RECV_TIMEOUT_MS` 全局一刀切 → 按服务分离(远显短超时+非阻塞,FTP 保留长超时);
|
||||
4. 超时参数分档:`NET_SEND/RECV_TIMEOUT_MS` 全局一刀切 → 按服务分离(远显短超时+非阻塞,FTP 保留长超时);
|
||||
5. **差量/RLE + 帧版本号 + 由拉改推**(**根治,收益最大**:典型变化 <100B → 单段一帧,延迟 ≈ 一个 RTT;
|
||||
稳态带宽 32KB/s → ≈0;D1 影响面 4 段 → 1 段;新命令走同一帧格式与 CRC,旧客户端兼容);
|
||||
6. **S4** 发送块配额与 MSS:48 块按实际使用的 3 个 socket 重新分配(各 16 块),MSS → 1460
|
||||
6. 发送块配额与 MSS:48 块按实际使用的 3 个 socket 重新分配(各 16 块),MSS → 1460
|
||||
(3209B 从 4 段降到 1~2 段);**约束**:单次写长度必须 ≤ 发送缓冲(TRAP-NET-16 铁律),
|
||||
改分配策略需同步 `net_bind` 重复分配路径,改前先读 `CH395F_Trap_Records.md`,改后跑 Phase 8 吞吐用例;
|
||||
**另**:MSS/块配额变更**必须**跑可信用例(`test/host/ch395f_socket_test.py tcp_client` 全序列 + 新连接独立 4096B 对照),判据 = **客户端侧内容完全匹配**(勿用带固件内读者的台架配方,其短收是读者吞数据不是故障);
|
||||
7. **S5** 去掉一次 3200B 拷贝(`g_tx` 直接承接位图,省 ~3.2KB 常驻 RAM;改前跑 `scripts/ram_report.py`);
|
||||
8. **S7** uiTask:`ui_net_sink_poll()` 前置到 `ui_port_step` 前 + while 排空(省按键一整拍);
|
||||
7. 去掉一次 3200B 拷贝(`g_tx` 直接承接位图,省 ~3.2KB 常驻 RAM;改前跑 `scripts/ram_report.py`);
|
||||
8. uiTask:`ui_net_sink_poll()` 前置到 `ui_port_step` 前 + while 排空(省按键一整拍);
|
||||
9. **日志非阻塞化:已实施·形态变更(生产者侧 2026-09-24 单写者;2026-10-25 与日志静默观察项合并评估收口)**:
|
||||
`fputc` → 环形缓冲**已落地**(4KB 环 + 单写者 + 事件位;4402µs/行 → µs 级入环,
|
||||
溢出 = 有界 200ms + dropped 账 + `[ERR]` 留痕;冲刷 = 有界裸发,见
|
||||
|
||||
Reference in New Issue
Block a user