下一步任务规划 2026-10-04 更新:阶段A闭环 + 状态全量同步 + 栈基线重采

盘点同步(§1/§2/§3/§4):
- 阶段 A A1~A4 全部真机验证通过(A1 P0-1 @test PASS;A2/A3/A4 正常路径零回归)
  → §1.2 P0 归零、P1 由 4 → 2(P1-8/P1-10 闭环)、阶段 A 表标 ✅(A5 P1-7 待手册)。
- §1.1 增补 2026-10-02/03 已闭环域:IWDG 看门狗(N-03 V2/V4/V5 台架验收)、
  存储侧 dhara resume 修复(S-6)+ ORE 僵尸通道自愈 + 卷锁、GD5F 错误通道族、
  E-34/E-04、堆低水位告警(S11)、测试架构 T-1~T-6 + S5/S4、RTC 套件汇总行。
- §1.2 登记簿 5 → 10(补 N-16/N-17/S-3/S-4/S-5;N-2 降级低风险观察项)。
- §2 阶段 B 标注为当前最高优先级;阶段 C 增 C6(USART1 TX-only 根治)、
  C3 改写(N-2 降级 + S-3)、C4 升级;阶段 D 增 D5(N-16)/D6(N-17)、D1 标 ✅。
- §4 诊断基线重采:Flash 266,676 B、RW_IRAM1 84,960 B、堆 min_ever 4,728 B、
  各任务运行时栈水位。§5 增变更记录。

栈基线重采(重要发现):产品构建(suite=NONE)V5 30 min 负载实测
defaultTask 峰值 3664B/4096(余量 432B ≈ 10%,已低于 30% 判据)——较 09-21 基线
2136B / 09-22 的 2872B 持续上升(A2/A3/A4 + IWDG + 卷锁 + 堆告警入链)。
→ 待处理内容.md S-1 升级为"需尽快处理";RAM使用分析与优化方案.md 标注 §2.3
栈表已过时 + 修正 §0 当前状态描述。

验证:pre-commit --all-files 17/17 Passed;run_all_suites.py --check-build 四套件全编译通过。
This commit is contained in:
2026-10-04 01:38:52 +08:00
parent 029437be89
commit 8947f8ac4d
3 changed files with 79 additions and 40 deletions
@@ -18,7 +18,7 @@
- F407 另有 **64KB CCM RAM**:**已于 2026-09-21 启用**并把 FreeRTOS 堆迁入(§1.2)
- 起步时没有任何运行时测量手段:不知道每个任务实际用了多少栈,改栈全靠拍脑袋
当前状态(**以 §2.1 受管快照为准**,由 `.map` 自动生成):RW_IRAM1 **87,040 / 131,072 B(66.4%)**、RW_CCM **49,184 / 65,536 B(75.0%)**、6 个任务栈全部 PASS(ftpTask 余量 71%,§0.6)。
当前状态(**以 §2.1 受管快照为准**,由 `.map` 自动生成):RW_IRAM1 **84,960 / 131,072 B(64.8%)**、RW_CCM **49,184 / 65,280 B(75.3%)**。⚠️ **任务栈:2026-10-04 重采(产品构建 V5 30 min 负载)显示 `defaultTask` 峰值升至 3664B/4096(余量 432B ≈ 10%,已低于 30% 判据)**,详见 §2.3 注与 `../审查记录/下一步任务规划.md` §4(登记 `待处理内容.md` S-1)。
本方案三个目标:
@@ -86,6 +86,12 @@
`Src/freertos.c` 中 `osThreadAttr_t.stack_size` 单位为**字节**(CubeMX 生成代码,`1024 * 4` 表示 4096 字节):
> ⚠️ **下表"实测峰值"列为 2026-09-21 快照,已过时**:2026-10-04 产品构建(`suite=NONE`)V5 30 min
> 真实负载重采(串口 `[STACK]`,证据 `/tmp/v5_soak_serial_20261003.log`)——**defaultTask 3664B/4096
> (余量 432B ≈ 10%,已低于 30% 判据,登记 S-1)**、ftpTask 2516B/4096(38%)、netTask 1228B/4096(70%)、
> uiTask 4060B/16384(75%)、timeSyncTask 792B/2048(61%)、testTask 496B/8192(93%)。
> 栈水位随 A2/A3/A4 + IWDG + 卷锁 + 堆告警等陆续入链持续上升,**本表需随 `stack_report.py` 重新基线**。
| 任务 | 配置栈 | 字节 | 实际职责 | 2026-09-21 实测峰值(§0.6) |
|---|---|---|---|---|
| uiTask | `4096*4` | 16KB | LVGL 1bpp 离屏渲染(渲染缓冲在静态区,栈只走调用链) | 3824 B(余量 76%)→ 可大幅缩减 |
+71 -38
View File
@@ -1,35 +1,43 @@
# 下一步任务规划(2026-09-26)
# 下一步任务规划(2026-09-26 初版 · 2026-10-04 更新)
> **用途**:在 L3 pending 一期闭环、文档体系重组、App/test 目录重整之后,对**当前项目状态**
> 做一次全量盘点,并给出**明确、可执行、有优先级**的下一步任务清单。
> **上游**:`docs/审查记录/项目审计改进清单.md`(审计待办全量)+ `docs/问题记录/错误码传播审计.md`
> (25 项未闭环发现)+ `docs/待处理内容.md`(登记簿,5 项)。
> (25 项未闭环发现)+ `docs/待处理内容.md`(登记簿)。
> **本文件不重复登记明细**——每项只给「做什么 / 为什么现在 / 入口在哪 / 完成判据」;
> 细则一律指向上游文档对应条目,避免三处维护。
>
> **2026-10-04 更新摘要**:台架窗口(10-02/10-03)执行了 `测试说明/实机测试实施指南.md`
> 步骤 3~7,**阶段 A 的 A1~A4 全部真机验证通过**;可靠性与自恢复(IWDG 看门狗)、
> GD5F 错误通道、测试架构(T-1~T-6 + S5/S4)等**已从"未闭环"转入"已闭环"**。
> 本次同步 §1 盘点、§2 各阶段状态、§3 顺序图与 §4 诊断基线。**明细仍以上游三文档为权威。**
---
## 1. 当前状态盘点(2026-09-26)
## 1. 当前状态盘点(2026-10-04)
### 1.1 已闭环(近三周)
### 1.1 已闭环(2026-09 中旬 ~ 10-04)
| 领域 | 成果 |
|---|---|
| 网络阻塞模型 | **L3 pending 一期(RECV)**:netTask 零占用、分片协议退役、队列响应性 28554ms→92.5ms(`a45c0cb`+`7ff2958`,已入主线并推送) |
| 网络稳定性 | Trap 21(TC-NET-604 判定非缺陷)/ Trap 22(快速复连监听静默死亡)/ Trap 23(中止后首笔静默截断)均闭环 |
| 错误码 | E-03 `s_net_errno` 跨任务竞态 → 按任务隔离槽位(`1b46e2a`) |
| 内存 | 预算基线重建 v1.2:产品构建 RW_IRAM1 82,048/131,072 B(62.6%)、RW_CCM 75.0%;lftpd 大局部缓冲静态化后 ftpTask 栈峰值 1184B/4096(余量 71%) |
| 工程卫生 | 文档体系重组 + D-7 一致性门禁(3 个新钩子)、Git LFS 托管 jpg、图床图片迁回本地、自建目录 README 体系(26 份)、App/test 目录按职责重整 |
| **可靠性与自恢复** | **独立看门狗(IWDG)+ 任务心跳位图(N-03)台架验收通过**(2026-10-03):V2 任务饿死声明 stall 后 ≤2.5s `reset cause: IWDG`;V4 关中断死循环每 ~4.9s 稳定复位;V5 30 min 真实负载 120/120 FTP PASS、**零 IWDG 复位**。`configASSERT` 改造 + 3 个次要 Fault 采集(N-03a/d)。见 `子系统设计/看门狗设计说明.md` |
| **存储侧健壮性** | **dhara resume 回滚修复(S-6)**:`dhara_journal_resume()` epoch 锚点改比较两候选(`930215f`);**ORE 僵尸通道自愈**(`con_uart_reinit` + 发送冷却);卷锁 `vol_lock` 落地(覆盖 syslog/cfg/lftpd)。见 `架构设计/STM32F4-Base存储架构说明.md` §5.4.1、`子系统设计/控制台单写者日志设计说明.md` §12 |
| 错误码 | E-03(`s_net_errno` 跨任务竞态 → 按任务隔离槽位);**E-34 / E-04 已修并真机验证(A3/A4,2026-10-03)**;**GD5F 错误通道族 E-10/E-42/E-53/E-54/E-56/E-57 一次做齐**(C2/S9,套件回归 16/16 PASSED) |
| 内存 | 预算基线重建 v1.2(2026-09-21):lftpd 大局部缓冲静态化使 ftpTask 峰值 3480→1184B(**当时**余量 71%;**2026-10-04 重采已升至 2516B,见 §4**);**堆低水位告警(S11)落地**,V5 长跑未触发(`min_ever=4728 B` > 3072 B 阈值) |
| 工程卫生 | 文档体系重组 + D-7 一致性门禁、Git LFS 托管 jpg、图床图片迁回本地、自建目录 README 体系(26 份)、App/test 目录按职责重整;**S5 `test-cppcheck` 钩子 + S4 用例追溯脚本(2026-10-03)** |
| **测试架构** | **T-1~T-6 全部落地(2026-10-01)**:`test-suite-switch` 门禁、`--require-suite-summary`、通用单测 harness、`test_common.h` 断言内核、`run_all_suites.py` 多套件编排、**Gitea Actions CI(`.gitea/workflows/ci.yml`)** + `scripts/ci_local.py`。**RTC 套件补套件级汇总行(2026-10-03)** |
### 1.2 未闭环(按严重度)
| 级别 | 数量 | 关键项 |
|---|---|---|
| **P0** | 0(1 项待真机验证) | P0-1 cfg_file 堆分配改造——**真机 `@test` 尚未执行**(模拟器宿主堆照不出) |
| **P1** | 4 | **P1-1 ADC 采样路径产品构建中死亡**、P1-7 MAC 写入顺序、**P1-8 网络重建失败无恢复**、P1-10 测试固件构建闭环 |
| **P2** | 13 | E-04 `remo_send` 丢返回值、E-34 CH395F `HAL_MAX_DELAY`、GD5F 错误通道族(E-10/42/53)、P2-1~P2-15 |
| **P3** | 11 | 卫生项,可顺手处理 |
| 登记簿 | 5 | N-2(49s 日志静默)、N-3(L5 基线重验)、N-4(pending 二期)、S-1(defaultTask 栈贴线)、S-2(boot_log 存档流程) |
| **P0** | **0** | P0-1(cfg_file 堆分配)**真机 `@test` 已 PASS(A1,2026-10-03)→ 闭环** |
| **P1** | 2(+1 待手册) | **P1-1 ADC 采样路径产品构建中死亡**、**P1-7 MAC 写入顺序**(A5,待 CH395F 手册 §9.2.1);~~P1-8 网络重建失败无恢复~~(A2 正常路径 ✅,负向转 N-16)、~~P1-10 测试固件构建闭环~~(S6 `--check-build` 已验 4 套件全编译通过) |
| **P2** | 见上游 | ~~E-04 `remo_send` 丢返回值~~、~~E-34 CH395F `HAL_MAX_DELAY`~~、~~GD5F 错误通道族(E-10/42/53/54/56/57)~~ **均已闭环**;剩余以 `项目审计改进清单.md` P2 表 + `错误码传播审计.md` §3 为准 |
| **P3** | 11 | 卫生项,可顺手处理(P3-1~13,见上游清单) |
| 登记簿 | 10 | 网络:N-2(49s 日志静默,**已降级为低风险观察项**)、N-3(L5 基线重验)、N-4(pending 二期)、N-16(A2/A4 专项负向验证)、N-17(探针窗口心跳缺口);存储/日志:S-1(defaultTask 栈贴线)、S-2(boot_log 存档)、S-3(USART1 TX-only 根治)、S-4(dhara 重试自旋)、S-5(可选全序列卷锁)。**N-03 系列已闭环**(见 §1.1) |
### 1.3 三个结构性判断
@@ -38,8 +46,10 @@
2. **真正的产品功能缺口在 ADC 与 RS-485 采集链路**:`adc_task`/`rs485_task` 均为空桩,
DTU 的核心职责(数据采集与转发)**尚未实现**。这既是 P1-1 的根源,也是 E-59 那条
"休眠缺陷闸门"的另一面——不是缺陷难修,而是**功能没接**。
3. **验证债重于代码债**:多个已改但未真机验证的项(P0-1)+ 测试固件构建未实测(P1-10)
+ 栈/基线未重锁(N-3、S-1)。这些不修不会立刻出事,但会让"0 错误 0 警告"的含金量下降。
3. **验证债已大幅偿还,重心转向"功能债"**(2026-10-04 修订):P0-1 真机验证 PASS、
P1-10 四套件 `--check-build` 全绿、IWDG 看门狗 V2/V4/V5 台架验收——**"改了没验"的
项已基本清零**。剩余验证债仅 **N-3(L5 基线重锁,待 PC peer)** 与 **S-1(defaultTask
栈余量已跌至 10%,**需尽快处理**,见 §4)** 两项。**当前最值得投入的是阶段 B(ADC/RS485 功能)**。
---
@@ -49,23 +59,25 @@
### 阶段 A:立即执行(改动小、风险高、当周可完)
> **状态(2026-10-03)**:A1~A4 全部**已实施并通过真机验证**——A1 判定 PASS(含配置持久化,见 `子系统设计/配置文件设计说明.md` 2026-10-03 记录);A2/A3/A4 正常路径零回归(A2 见 `网络/Net层阻塞模型架构设计.md`,A3/A4 见 `问题记录/错误码传播审计.md` E-34 / E-04);芯片级失败分支/短写/拔线负向场景记为待办(`待处理内容.md` N-16),待专项台架窗口。**执行流程见 `测试说明/实机测试实施指南.md` §3 / §10**。A5 待查手册。
> **状态(2026-10-04)**:**A1~A4 全部已实施并通过真机验证 → 闭环**(A1 判定 PASS,含配置持久化,见 `子系统设计/配置文件设计说明.md` 2026-10-03 记录;A2/A3/A4 正常路径零回归,A2 见 `网络/Net层阻塞模型架构设计.md`,A3/A4 见 `问题记录/错误码传播审计.md` E-34 / E-04);芯片级失败分支/短写/拔线负向场景记为待办(`待处理内容.md` **N-16**),待专项台架窗口。**执行流程见 `测试说明/实机测试实施指南.md` §3 / §10**。**A5(P1-7 MAC 写序)仍待查 CH395F 手册 §9.2.1**。
> 目标:清掉"会静默坏事"的产品级风险 + 还清验证债。全部是一档性质,无架构变更。
| 序 | 任务 | 为什么现在 | 入口 | 完成判据 |
|---|---|---|---|---|
| **A1** | **P0-1 真机 `@test` 验证**(cfg_file 堆改造) | 模拟器照不出该缺陷,这是 P0 修复的最后一道门;不做等于 P0 只是"理论已修" | `& '.venv\Scripts\python.exe' test/host/run_boot_test.py` | 日志出现 `load: OK`,Forbidden `FAIL` 零命中 |
| **A2** | **P1-8 网络重建失败恢复** | 一次 PHY 抖动 → 网络永久不可用且**零日志**,现场无法定位;产品不可接受 | `App/task/net_task.c` reconfig 路径 | 失败写 syslog 自检 + 周期重试(30s)+ 不自驻留;`@test` 通过 |
| **A3** | **E-34 CH395F 字节命令超时** | 3 处 `HAL_MAX_DELAY`(`ch395f.c:181/195/210`)= netTask 可被 SPI 卡死;**一行级改动** | 同上 | 有限超时(100~500ms)+ 返回值检查;构建 0/0 |
| **A4** | **E-04 `remo_send` 返回值** | 短写静默截断 → 客户端 CRC 失败 → 画面卡死黑屏;**设备侧日志全正常**(最难定位类) | `Drivers/BSP/UI/ui_net_sink.c:103` | 改返回 `int` 并校验 `ret == len`;短写 `DBG_ERROR` + 连续失败强制重连;UI 推流压力回归 |
| **A5** | **P1-7 MAC 写入顺序** | 先确认 CH395F 手册 §9.2.1(INIT 是否锁存 MAC)再改;若锁存则 UI 配置 MAC 不生效、设备在线身份错误 | `Drivers/BSP/NET/net_socket.c` `net_init()` | 依手册结论调整顺序或文档化"无需调整" |
| **A1** ✅ | **P0-1 真机 `@test` 验证**(cfg_file 堆改造) | 模拟器照不出该缺陷,这是 P0 修复的最后一道门;不做等于 P0 只是"理论已修" | `& '.venv\Scripts\python.exe' test/host/run_boot_test.py` | 日志出现 `load: OK`,Forbidden `FAIL` 零命中 **→ 已 PASS** |
| **A2** ✅ | **P1-8 网络重建失败恢复** | 一次 PHY 抖动 → 网络永久不可用且**零日志**,现场无法定位;产品不可接受 | `App/task/net_task.c` reconfig 路径 | 失败写 syslog 自检 + 周期重试(30s)+ 不自驻留;`@test` 通过 **→ 正常路径 ✅(V5 120×FTP 零复位)** |
| **A3** ✅ | **E-34 CH395F 字节命令超时** | 3 处 `HAL_MAX_DELAY`(`ch395f.c:181/195/210`)= netTask 可被 SPI 卡死;**一行级改动** | 同上 | 有限超时(100~500ms)+ 返回值检查;构建 0/0 **→ ✅** |
| **A4** ✅ | **E-04 `remo_send` 返回值** | 短写静默截断 → 客户端 CRC 失败 → 画面卡死黑屏;**设备侧日志全正常**(最难定位类) | `Drivers/BSP/UI/ui_net_sink.c:103` | 改返回 `int` 并校验 `ret == len`;短写 `DBG_ERROR` + 连续失败强制重连 **→ 正常路径 ✅(压测转 N-16)** |
| **A5** ⬜ | **P1-7 MAC 写入顺序** | 先确认 CH395F 手册 §9.2.1(INIT 是否锁存 MAC)再改;若锁存则 UI 配置 MAC 不生效、设备在线身份错误 | `Drivers/BSP/NET/net_socket.c` `net_init()` | 依手册结论调整顺序或文档化"无需调整" |
**阶段 A 出口**:`@build` 0/0 + 一轮 `@test` 闭环 + ST-LINK 全片回读;登记簿/清单同步销项。
### 阶段 B:核心功能补齐(产品价值最高,需产品定义确认)
> 目标:让 DTU 真正采到数——这是当前**最大的功能空洞**。
> **优先级(2026-10-04)**:阶段 A 已闭环(A5 待手册),**本阶段现为最高优先级**——
> 一旦 B0 产品定义明确,即可与 B3(纪律门禁)并行启动。
| 序 | 任务 | 前置 | 说明 |
|---|---|---|---|
@@ -82,35 +94,38 @@
|---|---|---|---|
| **C1** | **pending 二期(ACCEPT + SEND)** | 沿一期机制扩展;同期消化 E-25(net_select 语义)、E-24/E-27/E-28(跨上下文收口);基线重锁 + 探针族扩充 + 看门狗接 selftest。**设计基线见下方 §2.1** | 第二档 #2 / N-4 |
| ~~**C2**~~ | **GD5F 错误通道统一** | ✅ **已闭环(2026-10-03)**:E-10/E-42/E-53/E-54/E-56/E-57 一次做齐——`wait_busy` 区分超时/真故障、`bbt_scan` 失败**放弃持久化**(保护好副本)、init 全链路检查、回读 B0h 校验 ECC;台架套件回归 `16/16 PASSED (failed=0)` | 第二档 #1 |
| **C3** | **存储侧日志管线**(消化 N-2) | 49s 全系统日志静默的复现与定位(NAND GC 长尾 vs UART 卡滞)+ 队列满丢弃计数/告警(现静默丢行);与 S8(非阻塞日志)合并评估 | N-2 / S-1 |
| **C4** | **defaultTask 栈余量**(S-1) | 2872B/4096(余量 29.9%,差 4.8B 未达 30% 判据)→ 栈 4096→4608(CCM 堆余量可覆盖)或 GC 链局部削减 | S-1 |
| **C5** | 一档剩余 + P2 收口 | E-49(RS485 DE 收尾)、E-15(ringbuf 定去留——**已确认零调用者,倾向删除**)、E-61(SD2506 注释订正)、E-16(cfg_file 段名长度)、E-26(UDP 定案,倾向移除)、E-23、E-30 | 一档/二档 |
| **C3** | **存储侧日志管线**(消化 N-2) | **2026-10-03 降级**:丢弃可观测性**代码已具备**(`console_log.c` `s_con_drop`+`[ERR] CONSOLE dropped`、`sys_log_mcu.c` 队列满 `DBG_ERROR`、TX 僵尸通道自愈);V5 30 min 日志**未复现 49s 静默**(运行期 >10s 静默全为 ~28s、均在 `e02_probe` 窗口内=N-17)。剩余:与 S8(非阻塞日志)合并评估 + **S-3(USART1 TX-only 结构根治)** | N-2 / S-1 / S-3 |
| **C4** ⚠️ | **defaultTask 栈余量**(S-1,**已升级优先级**) | **2026-10-04 实测 3664/4096(余量 432 B ≈ 10%,远低于 30% 判据)**——较 09-21 基线 2136 B / 09-22 的 2872 B 持续上升。处置:栈 4096→4608(CCM 堆余量可覆盖 +512B)或 GC 链局部削减;**建议随阶段 B 之前先做** | S-1 |
| **C5** | 一档剩余 + P2 收口 | E-49(RS485 DE 收尾)、E-15(ringbuf 定去留——**已确认零调用者,倾向删除**)、E-61(SD2506 注释订正)、E-16(cfg_file 段名长度)、E-26(UDP 定案,倾向移除)、E-23、E-30;~~E-34~~/~~E-04~~ 已闭环 | 一档/二档 |
| **C6** | **USART1 TX-only 结构根治**(S-3) | 灭 ORE 僵尸机制根源:改 `.ioc` 令 USART1 不使能 RX / PA10 不复用为 `USART1_RX` → CubeMX 重生成 → 跑 `check_cubemx_survival.py`。属结构性改动,需单开一轮 + 复跑台架闭环 | S-3 |
### 阶段 D:验证与卫生(常态化)
| 序 | 任务 | 说明 |
|---|---|---|
| **D1** | **P1-10 测试固件构建闭环** | CH395F 套件 7 配置实际构建确认链接通过 + `@test`;**不建议**扩 scatter 到 192KB |
| **D2** | N-3 L5 基线重锁 | 下次 Phase 13 窗口顺带做(低风险:阈值余量 >8×) |
| **D1** ✅ | **P1-10 测试固件构建闭环** | ✅ **编译闭环(2026-10-04)**:`run_all_suites.py --check-build` 四套件(CH395F / STORAGE / GD5F / RTC)**全部 0 错 0 警、编译通过**;**不建议**扩 scatter 到 192KB。真机 `@test` 按需在各套件窗口做 |
| **D2** | N-3 L5 基线重锁 | 下次 Phase 13 窗口顺带做(低风险:阈值余量 >8×;**需 PC peer**) |
| **D3** | S-2 boot_log 快照存档流程 | 固化 `%TEMP%\opencode\boot_log_*.txt` 进 `docs/测试说明/` 存档目录 |
| **D4** | P3 卫生项 | P3-1~8/11/12/13(含 E-13 `test_parse_ip` 门控析取、P3-3 死代码 `app_main_run`)顺手清理 |
| **D5** | **N-16 专项负向台架窗口** | A2/A4 负向场景:PHY 拔线(需断 DTU 侧/关受管交换机端口)、A2 芯片级 `net_init` 失败(SPI 故障注入)、A4 短写压测 |
| **D6** | **N-17 探针窗口心跳缺口** | 定位 `time_sync` 监听重建为何阻塞 NET/FTP/UI(~1s 缺口,余量仅 ~0.7s);评估缩短重建重试或让掉线路径不阻塞其它任务 |
---
## 3. 建议执行顺序(一图)
```
【阶段 A 立即】 A1 验证债 ─┬─ A3 E-34(一行级)
├─ A4 E-04(UI 推流风险)
├─ A2 P1-8(网络不可恢复)
└─ A5 P1-7(待手册确认)
【阶段 A 立即】 ✅ A1 验证债 / A2 P1-8 / A3 E-34 / A4 E-04 —— 已闭环
⬜ A5 P1-7(待 CH395F 手册 §9.2.1)
↓
【阶段 B 功能】 B0 产品定义确认 ─┬─ B3 E-59 门禁固化(并行)
└─ E-58 原子快照 → B1 ADC → B2 RS485
(当前最高优先) └─ E-58 原子快照 → B1 ADC → B2 RS485
↓
【阶段 C 结构】 C1 pending 二期 ─ C2 GD5F 错误通道 ─ C3 日志管线 ─ C4 栈 ─ C5 收口
【阶段 C 结构】 C1 pending 二期 ─ ✅C2 GD5F 错误通道 ─ C3 日志管线(N-2/S-3)
─ C4 栈 ─ C5 收口 ─ C6 USART1 TX-only
↓
【阶段 D 常态】 D1 测试固件闭环 / D2 N-3 / D3 boot_log / D4 P3
【阶段 D 常态】 ✅D1 测试固件编译闭环 / D2 N-3 / D3 boot_log / D4 P3
/ D5 N-16 负向 / D6 N-17 探针窗口
```
---
@@ -152,13 +167,23 @@
## 4. 诊断基线(供后续对照)
| 项 | 当前值 | 出处 |
> **2026-10-04 重采**:栈/堆 = **运行时高水位**(产品构建 `suite=NONE`,V5 30 min 真实负载,串口 `[STACK]`,
> 证据 `/tmp/v5_soak_serial_20261003.log`);静态区 = `.map` 受管快照。
> ⚠️ **栈水位较 2026-09-21 基线明显上升**(defaultTask 实测 2136→**3664 B**、ftpTask 1184→**2516 B**)——
> 系 A2/A3/A4 + IWDG + 卷锁 + 堆告警等陆续入链所致。**S-1 需重新评估(已升级优先级)**,见 §2 C4。
| 项 | 当前值(2026-10-04) | 出处 |
|---|---|---|
| 产品构建 RW_IRAM1 | 82,048 / 131,072 B(62.6%) | `RAM使用分析与优化方案.md` v1.2 |
| 产品构建 RW_CCM | 49,184 / 65,536 B(75.0%) | 同上 |
| 实测堆 | free=8,784 / min_ever=4,848 B | 同上 |
| ftpTask 栈峰值 | 1184B / 4096(余量 71%) | `stack_report.py` |
| defaultTask 静态最坏链 | 2872B / 4096(余量 29.9%,**贴线**) | 同上 |
| 产品构建 Flash (ER_IROM1) | 265,940 B / 1024 KB(25.4%);ROM 合计 **266,676 B** | `.map` 受管快照 |
| 产品构建 RW_IRAM1 | **84,960 / 131,072 B(64.8%)** | `.map` 受管快照(`RAM使用分析与优化方案.md` §2.1) |
| 产品构建 RW_CCM | 49,184 / 65,280 B(75.3%) | 同上 |
| 实测堆 | free=8,664 / **min_ever=4,728 B** | V5 串口 `[STACK] heap` |
| **defaultTask 栈峰值** | **3664 / 4096(余量 432 B ≈ 10%,⚠️ 低于 30% 判据)** | V5 串口 `[STACK]`(产品构建) |
| netTask 栈峰值 | 1228 / 4096(余量 70%) | 同上 |
| ftpTask 栈峰值 | 2516 / 4096(余量 38%) | 同上 |
| uiTask 栈峰值 | 4060 / 16384(余量 75%) | 同上 |
| timeSyncTask 栈峰值 | 792 / 2048(余量 61%) | 同上 |
| testTask 栈峰值(产品态空转) | 496 / 8192(余量 93%) | 同上 |
| 队列响应性(挂起客户端) | 92.5ms(pending 一期) | `e02_probe.py` |
| M3 压力档帧周期 | med 60.1 / p95 66.4 / max 69.3ms,零尖峰 | `链路延迟测试说明.md` |
@@ -170,3 +195,11 @@
`待处理内容.md` 为权威。**任一项完成后,先销上游登记,再更新本文件的盘点表**。
- 阶段 A 完成后重跑本盘点;阶段 B 完成后重写 §1.2(届时 ADC/RS485 应从未闭环消失)。
- 新增发现按既有惯例:能立即修的进阶段 A/C5;需排期的进上游三文档;跨版本观察的进 `待处理内容.md`。
---
## 变更记录
| 日期 | 变更 |
|---|---|
| 2026-10-04 | **阶段 A 闭环 + 状态全量同步**:A1~A4 全部真机验证通过(A1 P0-1 `@test` PASS;A2/A3/A4 正常路径零回归)→ §1.2 P0 归零、§2 阶段 A 表标 ✅(A5 P1-7 仍待 CH395F 手册 §9.2.1)。§1.1 增补 2026-10-02/03 已闭环域:IWDG 看门狗(N-03 V2/V4/V5 台架验收)、存储侧 dhara resume 修复(S-6)+ ORE 僵尸通道自愈 + 卷锁、GD5F 错误通道族(E-10/42/53/54/56/57)、E-34/E-04、堆低水位告警(S11)、测试架构 T-1~T-6 + S5/S4。§1.2 P1 由 4 → 2(P1-8/P1-10 闭环)、登记簿 5 → 10(补 N-16/N-17/S-3/S-4/S-5,N-2 降级)。§2 阶段 B 标注为**当前最高优先级**;阶段 C 增 **C6(USART1 TX-only 根治)**、C3 改写(N-2 降级 + S-3)、C4 **升级**(defaultTask 栈实测 3664/4096 = 10%);阶段 D 增 **D5(N-16 负向窗口)/ D6(N-17)**、D1 标 ✅(`--check-build` 四套件全绿)。§4 诊断基线**重采**(Flash 266,676 B、RW_IRAM1 84,960 B、堆 min_ever 4,728 B、各任务运行时栈水位)。§3 顺序图同步 |
+1 -1
View File
@@ -17,7 +17,7 @@
| # | 事项 | 发现 | 证据与现状 | 出处 |
|---|---|---|---|---|
| S-1 | defaultTask 静态最坏链余量贴线:2872B/4096(余量 1224B = 29.9% < 30% 判据,差 **4.8B**)——`storage_bring_up → … → dhara GC → SPI` 链,**L3 前即如此**(L3 不触 defaultTask 调用链) | 2026-09-22(L3 产品构建栈报告) | 处置方向二选一:栈 4096→4608(CCM 堆余量 4816B 可覆盖 +512B)或 GC 链缓冲局部削减;与 S8(非阻塞日志)并案评估 | `scripts/stack_report.py`(L3 产品构建档) |
| S-1 | defaultTask 静态最坏链余量贴线:`storage_bring_up → … → dhara GC → SPI` 链 | 2026-09-22(L3 产品构建栈报告);**2026-10-04 重采升级** | **2026-10-04 重采(升级为需尽快处理)**:产品构建(`suite=NONE`)V5 30 min 真实负载实测 **3664B/4096(余量 432B = 10%)**——较 09-21 基线 2136B / 09-22 的 2872B 持续上升(A2/A3/A4 + IWDG + 卷锁 + 堆告警陆续入链),**已远低于 30% 判据**。处置方向二选一:栈 4096→4608(CCM 堆余量可覆盖 +512B)或 GC 链缓冲局部削减;建议**提前到阶段 B(ADC/RS485)之前**处理 | `/tmp/v5_soak_serial_20261003.log`(`[STACK] default peak_used=3664/4096`);`下一步任务规划.md` §2 C4 / §4 |
| S-2 | N-2 消化后,台架 20MB 串口日志截头会丢早期 [STACK] 水位行——跨构建的"前后"栈水位对照建议固化 boot_log 快照(`%TEMP%\opencode\boot_log_*.txt`)进 `docs/测试说明/` 存档目录 | 2026-09-22(L3 收尾发现:切片时代水位行已被截头,A/B 只能定性) | 流程项,无代码改动 | 本文件 N-2 佐证 |
| S-3 | **USART1 TX-only 结构根治(灭 ORE 僵尸机制)**——ORE 锁存在外设软复位后毫秒级重锁(PA10 悬空 + RX 使能),是 2026-10-02 台架"背靠背 drain 拉长主循环 → 喂狗节奏饥饿 → IWDG 误复位"的**机制根源**。现仅有缓解(round-3 单次 drain 250ms 预算 + round-6 发送故障后 300ms 冷却),**未根治** | 2026-10-02(台架 gen-288,见 `控制台单写者日志设计说明.md` §12) | **待办**:改 `.ioc` 令 USART1 为 TX-only(不使能 RX / PA10 不复用为 USART1_RX)→ CubeMX 重生成 → 跑 `scripts/check_cubemx_survival.py`。属结构性改动,需单开一轮并复跑台架闭环 | `子系统设计/控制台单写者日志设计说明.md` §12(含 O4);`App/log/console_log.c` 2026-10-02 修改记录 |
| S-4 | **dhara 重试自旋残留**——`try_recover()` 的 `DHARA_MAX_RETRIES`(8) 自旋在坏块密集时仍可能长时间占用 defaultTask(喂狗点) | 2026-10-02(round 7/8 取证期观察) | 低优先:现有 `vol_lock` + 喂狗节奏缓解;若台架再出"存储侧喂狗饥饿"再排期 | `Lib/dhara/map.c` |