From 1098fbd95259c755cd3e84e5eda6bd48846d7426 Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Sun, 4 Oct 2026 01:59:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E4=BC=A0=E6=92=AD?= =?UTF-8?q?=E5=AE=A1=E8=AE=A1=EF=BC=9A=E8=AE=A2=E6=AD=A3=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E4=B8=8E=E7=B4=A2=E5=BC=95=E2=80=94=E2=80=94=E6=9C=AA=E9=97=AD?= =?UTF-8?q?=E7=8E=AF=2025=E2=86=9217=E3=80=81=E5=B7=B2=E9=97=AD=E7=8E=AF?= =?UTF-8?q?=2033=E2=86=9241=EF=BC=8C=E5=90=8C=E6=AD=A5=20E-34/E-04/GD5F?= =?UTF-8?q?=E6=97=8F/E-60=20=E9=97=AD=E7=8E=AF=EF=BC=9B=C2=A70=20=E7=BB=93?= =?UTF-8?q?=E8=AE=BA=E9=80=9F=E8=A7=88=E3=80=81=C2=A72=20=E7=B4=A2?= =?UTF-8?q?=E5=BC=95=E3=80=81=C2=A73=20=E5=88=86=E7=B1=BB=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E3=80=81=C2=A74=20=E7=9F=A9=E9=98=B5=E4=B8=8E?= =?UTF-8?q?=E6=96=87=E6=9C=AB=E8=AE=A2=E6=AD=A3=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/问题记录/错误码传播审计.md | 71 +++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/docs/问题记录/错误码传播审计.md b/docs/问题记录/错误码传播审计.md index d7805999..942a19f3 100644 --- a/docs/问题记录/错误码传播审计.md +++ b/docs/问题记录/错误码传播审计.md @@ -17,7 +17,12 @@ ## 0. 结论速览 -**当前未闭环 25 项:P1×5、P2×20。无 P0。** +**当前未闭环 17 项:P1×2、P2×15。无 P0。** + +> **2026-10-04 订正(计数同步)**:2026-10-03 的 **E-34 / E-04**(第一档)与 +> **GD5F 错误通道统一(E-10 / E-42 / E-53 / E-56 / E-57,第二档 #1)** 已修复并台架验证, +> 加上 **E-60**(2026-09-21 订正),未闭环数由 25 降为 **17**(P1 5→2、P2 20→15); +> 已闭环索引同步为 **41** 项(§2)。本次只订正计数与索引,审计结论未变。 > **2026-10-02 追记(L0.5 单测新发现,已修复)**:**E-63(P0)** —— > `App/cfg/cfg_file.c` 外科手术保存的 3 处 `s_encode(...) == 0` 判定恒假 @@ -27,20 +32,23 @@ > 主机侧单测(S1-b)首跑抓出,已修复并通过 `@build` 0/0。**已闭环**, > 明细见 §2.1。 -首版 59 项中 **34 项已闭环**(见 §2),其中 3 项 P0 全部修复并在位。剩余问题分三类: +首版 59 项中 **41 项已闭环**(索引见 §2),其中 **4 项 P0 全部修复并在位**;**17 项未闭环** +(见 §3),另 **1 项回归监督**(E-62,无需改动、仅防后人误改)。剩余问题分三类: | 类别 | 数量 | 性质 | 处置 | |---|---|---|---| -| **A. 待处理的实质缺陷** | 10 | 有明确后果,需改代码 | §3.1,第一 / 二档 | +| **A. 待处理的实质缺陷** | 5 | 有明确后果,需改代码 | §3.1,第一 / 二档 | | **B. 契约缺口(随消费者接入触发)** | 7 | 当前调用者"恰好不会踩",但契约没写死 | §3.2,接消费者前必修 | -| **C. 一致性 / 可维护性** | 8 | 无功能影响或影响极小 | §3.3,第三档 | +| **C. 一致性 / 可维护性** | 5 | 无功能影响或影响极小 | §3.3,第三档 | -**最值得先动的两件事**: +**最值得先动的两件事**(2026-10-04 更新——原列的 **E-34 / E-04 已闭环**,见 §2.2): -1. **E-34(P1)**——CH395F 位命令 SPI 全部用 `HAL_MAX_DELAY`。SPI 硬件异常时会让 netTask - **永久挂死**(无看门狗兜底),代价是整机网络死亡;改有限超时是一行级别的改动。 -2. **E-04(P1)**——`remo_send` 丢弃 `net_send` 返回值。整帧 3204B 远超单次发送上限, - 弱网下短写是**合法返回**,当前完全无感知 → 客户端 CRC 失败断连。 +1. **E-59(P1,元发现)**——`adc_task` / `rs485_task` 均为空桩,驱动层多项缺陷 + (E-58 / E-50 / E-44 / E-45)**当前全部不可触发**;一旦接入真实消费者便会同时上线。 + 处置:把"接消费者前先修驱动契约 + 栈预算"固化为**强制门禁**(§5 第三档)。 +2. **E-58(P1)**——TPAFE 双缓冲角色互换 + 任务抢占 → 8 通道失去同一性, + 且**没有任何错误指示**;现因 `adc_task` 空桩而休眠,**接入消费者之日即触发**, + 属"接消费者前必修"(§5 第三档前置条件)。 > **2026-09-25 变更**:**E-03 已修复**(错误码改按任务隔离,见 §3.1)。 > 它是本次审计中唯一"并发条件下会说谎"的通道,且 pending 二期不覆盖它,故独立小修先行。 @@ -102,11 +110,11 @@ --- -## 2. 已闭环总览(33 项) +## 2. 已闭环总览(41 项) 只列索引与闭环依据,明细不再展开(首版明细可从 git 历史取回)。 -### 2.1 P0 三项(全部已修复并台架验证) +### 2.1 P0 四项(全部已修复并台架验证) | 编号 | 位置 | 危害 | 闭环 | |---|---|---|---| @@ -115,37 +123,41 @@ | **E-02** | `net_socket.c` / `lftpd` / `time_sync` | 一条空闲 FTP 控制连接把 netTask 独占 30s → **全体消费者队列停摆**(实测冻结远端显示 17.7s) | `f8d6e90`+`4a1605b`(分片)→ `a45c0cb`(L3 pending 化,结构性消灭) | | **E-63** | `App/cfg/cfg_file.c` | 外科手术保存 3 处 `s_encode(...) == 0` 判定恒假(函数成功返回**文本长度**)→ 受管值改写为**死码**:对已存在 `/config.ini` 保存时受管键从不改写(**静默不落盘**,`net_cfg_save` 仍报 OK) | **2026-10-02**(L0.5 `cfg_file` 单测首跑抓出)——判据由 `== 0` 改 `>= 0`;见 [`../测试说明/配置文件单元测试说明.md`](../测试说明/配置文件单元测试说明.md) §5 | -### 2.2 P1 十五项 +### 2.2 P1 十八项 E-05(net 建链 API 队列化)、E-06 / E-20 / E-21 的**主要分量**(随 E-02 pending 化落地)、 E-09(UI 页面局部副本 + 显式提交)、E-17(RECONFIG 原子消费)、 E-32(SD2506 充电器寄存器回读校验)、E-33(CH395F DMA 错误通道)、 E-36 / E-37(RS485 契约与 init 返回码)、E-38(SD2506 负温度解码)、 E-39 / E-51(SD2506 写允许窗口 / `set_alarm` 读-改-写)、E-40(FTL erase/prog 错误分类)、 -E-43(GD5F erase 容量边界)、**E-03(错误码按任务隔离,2026-09-25)**。 +E-43(GD5F erase 容量边界)、**E-03(错误码按任务隔离,2026-09-25)**、 +**E-34(CH395F 字节命令有限超时,2026-10-03)**、**E-04(`remo_send` 返回值校验,2026-10-03)**。 > 注:E-05 已闭环(建链 API 并入队列),但**同族的 `net_getsockname` 残留通道** > 在 §3.1-E-24 重新入册。 -### 2.3 P2 十五项 +### 2.3 P2 十九项 E-07(`f_close` 返回值检查 ×5)、E-08(preboot 分支并轨)、E-11(`cfg_file` 读路径返回值)、 E-14(net init/重建失败补自检留痕)、E-18(ftpTask 等待超时)、E-19(死事件位清理)、 E-22 的**主要分量**、E-29(`ui_net_sink` `FD_CLR` 合法性)、E-35(测试常量对齐)、 E-46(`0xECH` 非法字面量)、E-52(开机诊断检查 `get_*` 返回值)、 E-53(GD5F 轮询路径 HAL 返回值)、E-54(ECC 使能回读)、E-55(`dhara_nand_read` 返回值)、 -E-57(`int` / `int32_t` 混用)。 +E-57(`int` / `int32_t` 混用)、**E-10 / E-42 / E-56(GD5F init / BBT / raw 契约,2026-10-03)**、 +**E-60(SD2506 `SD2506_CHARGE_5K` 宏位订正,2026-09-21)**。 --- -## 3. 未闭环发现(25 项) +## 3. 未闭环发现(17 项) 每项字段统一为:**位置 → 机制 → 后果 → 当前状态 → 建议**。 -"当前状态"是本轮(2026-09-25)回到代码实测的结论。 +"当前状态"是本轮(2026-09-25)回到代码实测的结论;**2026-10-03 已修复的条目 +(E-04 / E-10 / E-42 / E-53 / E-56)与 2026-09-25 的 E-03 保留为留档**(标 ✅),不计入未闭环数。 -### 3.1 A 类:待处理的实质缺陷(10 项) +### 3.1 A 类:待处理的实质缺陷(未闭环 5 项) -> **2026-09-25 已闭环 1 项**:E-03(见下方划线条目,保留留档)。 +> **本类已闭环留档**:E-03(2026-09-25)、E-04 / E-10 / E-42 / E-53 / E-56(2026-10-03)—— +> 见下方各条目的 ✅ 标记与 §2 索引;此处保留详细条目仅作背景留档。 --- @@ -337,7 +349,7 @@ E-57(`int` / `int32_t` 混用)。 --- -### 3.2 B 类:契约缺口(随消费者接入触发,7 项) +### 3.2 B 类:契约缺口(随消费者接入触发,未闭环 7 项) 这一类的共同特征:**静态缺陷真实存在,但当前没有调用者能走到**。它们现在不产生故障, 但契约没写死,属于"埋着的雷"。**触发条件一旦出现(新消费者、参数变更、库配置变更),立即升 P1。** @@ -432,9 +444,10 @@ E-57(`int` / `int32_t` 混用)。 --- -### 3.3 C 类:一致性 / 可维护性(8 项) +### 3.3 C 类:一致性 / 可维护性(未闭环 5 项) 无功能影响或影响极小,排在第三档批量处理。 +**本类已闭环留档**:E-57(2026-10-03)、E-60(2026-09-21);**监督项**:E-62(无需改动)。 | 编号 | 位置 | 问题 | 当前状态(复核) | 建议 | |---|---|---|---|---| @@ -457,17 +470,18 @@ E-57(`int` / `int32_t` 混用)。 |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| | P1 值拷贝 | ✓ | — | ✓ | ✓ | — | — | — | — | — | — | — | — | — | — | | P2 共享全局 | ✓ | ✓ | ✓ | ✓ | — | — | — | — | — | **E-27/E-28** | **E-27/E-28** | ✓ | ✓ | E-30 | -| P3 混同 | **E-25** | — | ✓ | — | E-47 | ✓ | ✓ | **E-31后续**/**E-56** | — | ✓ | ✓ | **E-04** | ✓ | E-30 | -| P4 未检查 | ✓ | ✓ | **E-16** | ✓ | ✓ | E-48 | ✓ | **E-10**/**E-42**/**E-53** | — | ✓ | ✓ | ✓ | ✓ | — | +| P3 混同 | **E-25** | — | ✓ | — | E-47 | ✓ | ✓ | **E-31后续** | — | ✓ | ✓ | ✓ | ✓ | E-30 | +| P4 未检查 | ✓ | ✓ | **E-16** | ✓ | ✓ | E-48 | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ | — | | P5 事件语义 | ✓ | ✓ | ✓ | — | — | — | — | — | — | ✓ | ✓ | ✓ | ✓ | — | | P6 符号/宽度 | — | — | — | — | — | — | — | — | — | — | — | — | — | — | | P7 跨上下文 | **E-24** | — | ✓ | ✓ | — | **E-50** | — | — | **E-58** | E-27/E-28 | ✓ | ✓ | — | — | -| P8 外设/库 | **E-26** | — | ✓ | ✓ | E-47 | — | E-61 | E-56 | — | — | — | — | — | — | +| P8 外设/库 | **E-26** | — | ✓ | ✓ | E-47 | — | E-61 | ✓ | — | — | — | — | — | — | | P9 超时/错误 | ✓ | — | — | — | E-47 | **E-49** | — | ✓ | ✓ | ✓ | ✓ | — | — | — | **读法提示**:三处"空白带"(事件标志、syslog、配置引擎的大部分行)不是没审, -而是首版查出的问题已闭环。**当前未闭环项高度集中在 GD5F 驱动、RS485/TPAFE 驱动、 -与 net 层全局状态。** +而是首版查出的问题已闭环。**GD5F 列的项已于 2026-10-03 全部闭环**(矩阵该列已清空), +当前未闭环项集中在 **RS485/TPAFE 驱动(E-49 / E-50 / E-58)、net 层全局状态 +(E-24 / E-25 / E-26 / E-27 / E-28)、配置引擎(E-16)与测试基础设施(E-23 / E-30)。** --- @@ -603,3 +617,8 @@ cppcheck 无告警、`git diff --check` 干净、编码无 `U+FFFD` 且 BOM 状 未闭环数量 26 → **25**(P1 6 → 5)。**台架硬件闭环未执行**——本机 COM6 未枚举 (ST-Link 虚拟串口不在,`run_boot_test.py` 报 `open failed`)→ E-03 待补台架回归 (建议复用既有 FTP/UI 推流路径 + `net_test_task` Phase 7 的 errno 判定分支)。* + +*2026-10-04 订正:同步 2026-10-03 的 **E-34 / E-04 / GD5F 族(E-10 / E-42 / E-53 / E-56 / E-57)** +与 **E-60** 闭环结果——**§0 未闭环 25 → 17**(P1 5→2、P2 20→15),**§2 已闭环 33 → 41** +(P0 3→4、P1 15→18、P2 15→19),§3 各类计数(A 10→5、C 8→5)与 §4 矩阵(清空 GD5F 列) +同步更新。本次订正**仅改计数与索引,未改动任何审计结论**。*