Files
STM32F4-Base/docs/审查记录/下一步任务规划.md
T

12 KiB
Raw Blame History

下一步任务规划(2026-09-26)

用途:在 L3 pending 一期闭环、文档体系重组、App/test 目录重整之后,对当前项目状态 做一次全量盘点,并给出明确、可执行、有优先级的下一步任务清单。 上游:docs/审查记录/项目审计改进清单.md(审计待办全量)+ docs/问题记录/错误码传播审计.md (25 项未闭环发现)+ docs/待处理内容.md(登记簿,5 项)。 本文件不重复登记明细——每项只给「做什么 / 为什么现在 / 入口在哪 / 完成判据」; 细则一律指向上游文档对应条目,避免三处维护。


1. 当前状态盘点(2026-09-26)

1.1 已闭环(近三周)

领域 成果
网络阻塞模型 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 目录按职责重整

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 存档流程)

1.3 三个结构性判断

  1. 网络层已是全项目最成熟子系统(pending 机制 + 四份 Trap 记录 + 量化基线 + 探针族)。 剩余网络工作都是"二期扩展/收口",没有紧急项。
  2. 真正的产品功能缺口在 ADC 与 RS-485 采集链路:adc_task/rs485_task 均为空桩, DTU 的核心职责(数据采集与转发)尚未实现。这既是 P1-1 的根源,也是 E-59 那条 "休眠缺陷闸门"的另一面——不是缺陷难修,而是功能没接。
  3. 验证债重于代码债:多个已改但未真机验证的项(P0-1)+ 测试固件构建未实测(P1-10) + 栈/基线未重锁(N-3、S-1)。这些不修不会立刻出事,但会让"0 错误 0 警告"的含金量下降。

2. 下一步任务规划

排序原则:先降风险(产品级故障)→ 再补功能(核心链路)→ 再清结构债 → 最后卫生。

阶段 A:立即执行(改动小、风险高、当周可完)

目标:清掉"会静默坏事"的产品级风险 + 还清验证债。全部是一档性质,无架构变更。

序 任务 为什么现在 入口 完成判据
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() 依手册结论调整顺序或文档化"无需调整"

阶段 A 出口:@build 0/0 + 一轮 @test 闭环 + ST-LINK 全片回读;登记簿/清单同步销项。

阶段 B:核心功能补齐(产品价值最高,需产品定义确认)

目标:让 DTU 真正采到数——这是当前最大的功能空洞。

序 任务 前置 说明
B0 产品定义确认(阻塞项) — 需甲方明确:① 采集是否持续 ② 采样率/通道 ③ 转发目标(MODBUS RTU?上行 TCP?)④ APP_ADC_ENABLE/APP_RS485_ENABLE 语义。B1/B2 的规模完全取决于此
B1 ADC 采集链路实现(消化 P1-1、E-58) B0 + E-59 门禁 周期 CONVST 重触发 + adc_task 消费 get_buf;先修 E-58(原子快照 API,否则接入即撕裂);栈预算核算(两任务未入 freertos.c 栈表)
B2 RS-485 采集链路实现(消化 E-50、E-49) B0 + E-59 门禁 双缓冲 + 序号(防包撕裂)+ DE 收尾(超时路径等 TC)+ 协议状态机(App/protocol/ 正是为此预留)
B3 E-59 门禁固化入 AGENTS.md — 把"接消费者前必须先修 E-36/E-44/E-45/E-58 + 栈预算"写成强制门禁,与"改栈前跑 stack_report.py"同级。这是防止 B1/B2 带缺陷上线的关键

建议:B3 与 B0 并行推进(前者是纪律,后者问甲方);E-58 修复应在 B1 动消费者之前完成。

阶段 C:结构债清理(二期)+ 存储侧健壮性

序 任务 说明 出处
C1 pending 二期(ACCEPT + SEND) 沿一期机制扩展;同期消化 E-25(net_select 语义)、E-24/E-27/E-28(跨上下文收口);基线重锁 + 探针族扩充 + 看门狗接 selftest。设计基线见下方 §2.1 第二档 #2 / N-4
C2 GD5F 错误通道统一 E-10/E-42/E-53/E-54/E-56/E-57 一次做齐:wait_busy 区分超时/真故障、bbt_scan 失败放弃持久化(保护好副本)、init 全链路检查 + 重试、回读 B0h 校验 ECC 第二档 #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 一档/二档

阶段 D:验证与卫生(常态化)

序 任务 说明
D1 P1-10 测试固件构建闭环 CH395F 套件 7 配置实际构建确认链接通过 + @test;不建议扩 scatter 到 192KB
D2 N-3 L5 基线重锁 下次 Phase 13 窗口顺带做(低风险:阈值余量 >8×)
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)顺手清理

3. 建议执行顺序(一图)

【阶段 A 立即】  A1 验证债 ─┬─ A3 E-34(一行级)
                           ├─ A4 E-04(UI 推流风险)
                           ├─ A2 P1-8(网络不可恢复)
                           └─ A5 P1-7(待手册确认)
        ↓
【阶段 B 功能】  B0 产品定义确认 ─┬─ B3 E-59 门禁固化(并行)
                                └─ E-58 原子快照 → B1 ADC → B2 RS485
        ↓
【阶段 C 结构】  C1 pending 二期 ─ C2 GD5F 错误通道 ─ C3 日志管线 ─ C4 栈 ─ C5 收口
        ↓
【阶段 D 常态】  D1 测试固件闭环 / D2 N-3 / D3 boot_log / D4 P3

3.1 C1 设计基线(pending 二期:ACCEPT + SEND)

来源:一期(RECV)架构现状见 docs/网络/Net层阻塞模型架构设计.md(含演进溯源附录); 本节仅保留二期仍要用的设计基线。

一期已验证的机制骨架(二期沿用,勿重新发明):独立静态 pending 表 + net_pending_tick 主循环节拍了结(五路:数据/到点/断连/同 fd 串行/重建取消必通知)+ 登记守卫(每 fd 至多一个、 不覆盖、拒绝 netTask 自等待)+ 1s 看门狗强结算。

二期扩展点:

项 目标 对应缺陷
ACCEPT pending accept 等待改为"登记 → CONNECT 事件完成",退役 100ms/200ms 轮询循环 E-06(accept 轮询计时失真)
SEND pending 发送续传改为"登记 → send_ready 完成",消除 1s/分片 stall 对队列的冻结 E-02 残余(SEND 位置)

二期门禁(一期门禁的加强版):

  1. CH395F NET 层全套件(含一期未跑的 Phase 7 / Phase 10,视 RAM 预算);
  2. L3/L5 基线重锁(一期已重锁 M3,二期须再锁);
  3. e02_probe.py 探针族扩充:close / reconfig / EOF / disconnect-during-pending 四专项;
  4. ftp_regression.py(D20)+ E-06 假 425 场景独立重跑(一期是借 M3 压力档覆盖的);
  5. UI 远端推流压力 + timeSync 三场景;
  6. 产品 @test 闭环 + ST-LINK 全片回读;
  7. ram_report.py / stack_report.py 前后对比(铁律);
  8. 看门狗接 selftest 留痕 + 模拟器差距清单 +1(net_socket_sim.c 无法建模 pending)。

已知代价(延续一期,需文档化):pending 完成判定随主循环节拍运行,被长操作占用时超时 顺延(~1ms 级);二期把 SEND 也 pending 化后,该顺延面反而收窄。

改动量估算:再 ~300-500 行,集中在 net_socket.c;公开 API 不变。风险评级中 (执行器核心 + D 系列前科)——大的是验证,不是代码。


4. 诊断基线(供后续对照)

项 当前值 出处
产品构建 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%,贴线) 同上
队列响应性(挂起客户端) 92.5ms(pending 一期) e02_probe.py
M3 压力档帧周期 med 60.1 / p95 66.4 / max 69.3ms,零尖峰 链路延迟测试说明.md

5. 维护约定

  • 本文件不是登记簿——它是"盘点 + 排序",明细以 项目审计改进清单.md / 错误码传播审计.md / 待处理内容.md 为权威。任一项完成后,先销上游登记,再更新本文件的盘点表。
  • 阶段 A 完成后重跑本盘点;阶段 B 完成后重写 §1.2(届时 ADC/RS485 应从未闭环消失)。
  • 新增发现按既有惯例:能立即修的进阶段 A/C5;需排期的进上游三文档;跨版本观察的进 待处理内容.md。