错误码传播审计:订正计数与索引——未闭环 25→17、已闭环 33→41,同步 E-34/E-04/GD5F族/E-60 闭环;§0 结论速览、§2 索引、§3 分类计数、§4 矩阵与文末订正记录
This commit is contained in:
+45
-26
@@ -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 列)
|
||||
同步更新。本次订正**仅改计数与索引,未改动任何审计结论**。*
|
||||
|
||||
Reference in New Issue
Block a user