12 KiB
下一步任务规划(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 三个结构性判断
- 网络层已是全项目最成熟子系统(pending 机制 + 四份 Trap 记录 + 量化基线 + 探针族)。 剩余网络工作都是"二期扩展/收口",没有紧急项。
- 真正的产品功能缺口在 ADC 与 RS-485 采集链路:
adc_task/rs485_task均为空桩, DTU 的核心职责(数据采集与转发)尚未实现。这既是 P1-1 的根源,也是 E-59 那条 "休眠缺陷闸门"的另一面——不是缺陷难修,而是功能没接。 - 验证债重于代码债:多个已改但未真机验证的项(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 位置) |
二期门禁(一期门禁的加强版):
- CH395F NET 层全套件(含一期未跑的 Phase 7 / Phase 10,视 RAM 预算);
- L3/L5 基线重锁(一期已重锁 M3,二期须再锁);
e02_probe.py探针族扩充:close / reconfig / EOF / disconnect-during-pending 四专项;ftp_regression.py(D20)+ E-06 假 425 场景独立重跑(一期是借 M3 压力档覆盖的);- UI 远端推流压力 + timeSync 三场景;
- 产品
@test闭环 + ST-LINK 全片回读; ram_report.py/stack_report.py前后对比(铁律);- 看门狗接 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。