617c84f570
代码注释去阶段化已在 task-arch-docs-sync 分支 d770e36 落地,本次把
同一口径补到文档正文(文末变更记录行作为历史保留不动)。
- BSD 使用指南 / 函数调用关系:删 自愈收敛阶段 N、N-32 P1/P2、
L3 pending、一期二期;职责边界与实现位置改为现状口径
- CH395F_Trap_Records:TRAP-NET-17 / -21 / B10 状态行改述为现行形态
- 链路延迟测试说明:L3 pending → 挂起 recv;P0-a 阶段标签删除
- 模拟器差距清单:N-3 / N-4 / N-6 行改述(对账形态③④、无手动 relisten)
- 错误码传播审计:L3 pending → 挂起 recv;"N-4 二期" → N-4
- 任务规划 README / 登记簿 N-4 / 排期详述 C1 / 基线与待确认 §2.1:
一期二期 → recv 挂起已落地 / ACCEPT pending 化(§2.1 标题同步)
- CH395F_Test_Guide:阶段 15 标题去掉撞名的"自愈收敛阶段 2"
- IEC104 上行设计说明:门控迁移改现状口径;"随二期" → 未登记具体条目
- 保留可检索锚点:TRAP-NET-*、E* / U* / D10、形态③④、N-4、Phase 15
门禁:check_doc_links.py --all 通过(143 文档、可判定章节引用 1282 处、
0 错 0 警);check_mojibake 全过;CR=0、U+FFFD=0、无 BOM 变化。
本轮只改 .md,无代码改动,故不跑 @build。
13 KiB
13 KiB
登记簿(长期观察项;存量 N-x / S-x / T-x,新条目用语义标识)
编号空间与"不回收"规则见
docs/任务规划/README.md§0;排期位置见docs/任务规划/README.md§2 波次总览; 当前波次任务卡(带 DoD / 写范围 / 状态)在W1-采集保护收尾.md。 本文件是低频文件:新发现按类别进对应表;销项 = 删行 + 清引用(docs/任务规划/README.md§3)。 2026-10-14 起新条目的#列填「语义标识」——一行短语直接说清是什么事(如沉降窗 800ms 上限只留痕、RS485 采集接线),不再新增字母+数字编号;存量编号冻结沿用, 已随销项消失的号永久作废、不得复用(原因与撞号实测见docs/任务规划/README.md§0)。
1. 网络(CH395F / net 层)
| # | 事项 | 发现 | 证据与现状 | 出处 |
|---|---|---|---|---|
| N-2 | 49s 全系统日志静默(defaultTask/NAND syslog 排空停滞)——串口日志 49s 无行,期间 net 栈照常处理外部连接 → 日志管线停滞,队列满后各任务日志行被丢;系统功能不受损 | 2026-09-22(L3 台架 F2,gen 181) | A/B 归因:既有存储侧现象。2026-10-03 降级为低风险观察项:① 丢弃可观测性代码已具备(console_log.c s_con_drop + [ERR] CONSOLE dropped;sys_log_mcu.c 队列满 DBG_ERROR;UART TX 僵尸通道自愈);② V5 30 min 未复现 49s(>10s 静默全为 ~28s、均在 e02_probe 窗口内=N-17)。残余待办:与 S8(非阻塞日志)合并评估(C3) |
错误码传播审计.md E-02 阶段二 |
| N-3 | L5 队列往返基线(1223/988µs)的 L3 后重验——L5 测 DONTWAIT 队列全程;L3 对该路径逐位不变 → 机制上无影响,但基线数值属分片时代,严格重锁需跑一轮 Phase 13(需 PC peer) | 2026-09-22(L3 收尾留档) | 低风险:10ms/100ms 阈值余量 >8×;下次 Phase 13 窗口顺带重锁即可 | 链路延迟测试说明.md §6.4 L5 注¹ |
| N-4 | ACCEPT 阻塞路径 pending 化(recv/send 挂起机制已落地,扩展到 accept)——E-06、E-20、E-21 剩余分量共用该机制扩展;届时延迟探针 L3/L5 基线再重锁、探针族扩充、看门狗接 selftest 留痕、模拟器差距清单 +1 | — | recv 挂起已落地;send 挂起已于 2026-10-14 落地(构建门禁过、台架复测待做),ACCEPT 仍待做(收益性质不同,优先级低——见 Net层阻塞模型架构设计.md §10 判据)。架构现状见 Net层阻塞模型架构设计.md,ACCEPT 设计基线见 基线与待确认.md §2.1 |
错误码传播审计.md 第二档 #2 |
| N-16 | A2/A4 专项场景台架验证待办(正常路径已实测零回归):① PHY 拔线负向测试——断链需断 DTU 侧线缆或关受管交换机端口;② A2 芯片级 net_init 失败分支(需 SPI 故障注入);③ A4 短写压测(需远显客户端 + UI 推流压力) |
2026-10-03(台架拓扑 = CH395↔交换机,拔线操作受限) | 待专项台架窗口 | 实机测试实施指南.md §10 |
| N-17 | **time_sync 30s 挂起客户端掉线 + 监听重建期间,网络任务心跳缺口达 800ms~1s(声明 stall 但未复位)。待办:定位监听重建为何阻塞 NET/FTP/UI;评估缩短重建重试(5×2s)或让掉线路径不阻塞其它任务 |
2026-10-03(V5 台架) | V5 长跑 44 次 task stall: mask=0x00000001,100% 与 e02_probe 的 30s 挂起客户端触发 time_sync: no TIME packet in 30s, drop conn → 监听重建(约 4s)重合;隔离实验(仅 FTP,120s)0 次 stall → 探针场景专属。缺口(~1s)< IWDG 最坏超时(1701ms),余量仅 ~0.7s。 |
实机测试实施指南.md §4;../子系统设计/看门狗设计说明.md |
| N-30 | relisten 沉降段统一到驱动 sock_reset 原语受阻——"去重复实现"的收口已实测回退:原语版 ftp_abort_probe RST 0/10、FIN 0/5(中止后首笔复连仍被截断到 ≤2048B),另新增 sock_reset_sync timeout (600ms) 与 close: sock_reset not done 两条 [ERR];同场 net 层自建序列 10/10 + 5/5 |
2026-10-14(同一块板 A/B,判据 test/host/ftp_abort_probe.py;快复连 50/50、背靠背 30/30 两版都过 → 失效面精确落在"中止后首笔复连") |
现状 = net_listener.c 保留自建排渣序列(排空 + CLOSE + 排事件 + 等 CLOSED,30 ms 重试轮持续清)。重开前置三条语义:① 隔离窗内持续排空/关闭(残渣在 CLOSE 之后才落进 RX,一次排空接不住)② 复用让位(复位机不得拆上层刚在同一芯片 Socket 上重建的监听)③ net_sock_reset_sync 改"已在运行 = 加入等待"(begin 返 -1 ≠ 失败) |
../网络/网络自愈架构设计.md §8 延后项 1、§5.2 E16;../问题记录/CH395F_Trap_Records.md TRAP-NET-18 |
2. 存储 / 日志管线
| # | 事项 | 发现 | 证据与现状 | 出处 |
|---|---|---|---|---|
| S-3 | USART1 TX-only 结构根治(灭 ORE 僵尸机制)——ORE 锁存在外设软复位后毫秒级重锁(PA10 悬空 + RX 使能),是 2026-10-02 台架"背靠背 drain 拉长主循环 → 喂狗节奏饥饿 → IWDG 误复位"的机制根源。现仅有缓解(单次 drain 250ms 预算 + 发送故障后 300ms 冷却),未根治 | 2026-10-02(台架 gen-288) | 待办:改 .ioc 令 USART1 为 TX-only → CubeMX 重生成 → 跑 scripts/check_cubemx_survival.py。结构性改动,需单开一轮并复跑台架闭环 |
../子系统设计/控制台单写者日志设计说明.md §12(含 O4) |
| S-4 | dhara 重试自旋残留——try_recover() 的 DHARA_MAX_RETRIES(8) 自旋在坏块密集时仍可能长时间占用 defaultTask(喂狗点) |
2026-10-02 | 低优先:现有 vol_lock + 喂狗节奏缓解;若台架再出"存储侧喂狗饥饿"再排期 |
Lib/dhara/map.c |
| S-5 | 可选全序列卷锁——现卷锁仅覆盖 syslog / cfg / lftpd 三条路径(vol_lock_wait(0) try 语义),其它潜在访问点(如 UI 读日志)未纳入 |
2026-10-02 | 待评估:先确认是否真有第二写者;无则关闭本项 | App/fs/vol_lock.{c,h} |
3. 硬件(V0.1 缺陷 → V0.2 改版项)
| # | 事项 | 发现 | 证据与现状 | 出处 |
|---|---|---|---|---|
| N-18 | 8 路电气量分属两片转换器(V0.1 硬件缺陷,需下一版硬件修改)——UA/UN/IA 走 TPAFE5160(16 位、8 通道同步、±5 V 双极性),UB/UC/IB/IC/IN 走 STM32 ADC(12 位、顺序扫描、0~3.3 V 单极性):① 两片转换器无共同采样触发 + STM32 侧顺序扫描(9 通道一轮 ≈ 67 µs)→ 跨转换器通道无同一时刻性、相位关系不确定,主板侧功率/功率因数/相角/对称分量类运算不成立;② 同族电气量精度与量程不一致(LSB ≈ 152.6 µV vs ≈ 806 µV,且 STM32 侧前端无中点偏置、负半周削顶);③ 语义与硬件归属交叉,固件映射/UI 通道序/自检注入须逐通道查表绕开 | 2026-10-10 定性更正(撤销 2026-10-09 建档时"有意分配、不要修正"的说法) | V0.2 改版要求:8 路电气量 UA/UB/UC/UN/IA/IB/IC/IN 全部接 TPAFE5160,与 TPAFE 上 5 路备用路(AIN5/13/7/15/12)对调串联电阻在转换器一侧的目的地——元件数量与料号不变,属走线级改动。V0.1 现板软件口径:主板侧只做逐通道独立监视,禁止跨转换器做相位/功率/功率因数/矢量类运算(此类量取子板计量模块结果)。固件侧消费者已落地(B1,2026-10-10,按语义映射表取数)→ V0.2 改版只改映射表内容,上层语义与代码不动 | ../硬件平台/ADC通道映射说明.md §1/§7;../硬件平台/V0.1_网表详细分析报告.md §1.4 V10、§6-3 |
4. 测试与验证基础设施
| # | 事项 | 优先级 | 问题与证据 | 处置方向 | 出处 |
|---|---|---|---|---|---|
| T-7 | CI runner 未就绪(部署前置) | 中 | .gitea/workflows/ci.yml 已落地,但 CI 仅在 runner 就绪后才真正生效:① Gitea 实例 [actions] ENABLED = true;② 注册 Windows runner(labels 含 windows),装 Python 3.x / cppcheck / pre-commit / MSVC;③ runner 就绪后推送远端跑一次两 job 闭环验证(当前 21 个提交未推送,CI 从未真实执行);④ 第二机交叉验证(不同工具安装路径,验 DTU_* 环境变量方案,→ ../环境与部署/本地工具路径环境变量方案.md 变更记录 TODO) |
runner 未就绪前,提交前仍须在本地跑 scripts/ci_local.py 或 pre-commit run --all-files 自查(L0 唯一保障,不能因"已配 CI"而放宽) |
.gitea/workflows/ci.yml;../测试说明/测试开发标准流程.md §9 |
5. 审查报告并轨(2026-10-11;⚠ 报告编号与本登记簿同名不同义,出处列保留报告编号,引用一律带文档名)
| # | 事项 | 影响 / 现状 | 处置方向 | 波次 | 出处 |
|---|---|---|---|---|---|
| N-20 | Error_Handler 仍 __disable_irq(); while(1){}(Src/main.c:274-282) |
一处初始化失败 = 整机挂死(只剩 IWDG 兜底),无自检日志 | 统一降级策略:记自检 + 禁用该子系统 + 其余照常 | W4 | 报告 N-03c |
| N-21 | dhara 两处:dhara_nand_is_free() 只查页首 64 B;dhara_nand_copy() 不处理 DHARA_NO_PAGE 哨兵 |
映射恢复误判 → 数据丢失风险(低概率、后果重);哨兵页号被当真实页 → 未定义行为;至今只能靠人工读代码发现 | 整页(或首/中/尾)扫描 + 返回 DHARA_E_UNSUPPORTED;必须配主机侧移植层单测(一并补报告"覆盖率"缺口) |
W2 | 报告 N-12/N-13 + §7 |
| N-22 | 写回缓存无空闲/掉电强制 flush(整页写与换页已 flush) | 写回窗口内掉电丢最近日志/配置写 | defaultTask 空闲 N ms flush | W4 | 报告 N-14 |
| N-23 残余 | 钩子已落地(2026-10-12 registration-check 挂 pre-commit,存量缺口走 KNOWN_GAPS 白名单只 WARN);残余 = 白名单清理:rs485_task.c(随 B2 暂缓一并处置:删除或注册)、lftpd_log.c;app_cfg.h 未接线开关(C5) |
白名单不清 = "写了不编译"盲区仍在 | 逐项清白名单(--strict 供审计复跑);开关随 C5 处置 |
W4(C5) | 报告 N-06 残余 + 报告 S-3 |
| N-24 | 日志每条 f_open+f_write+f_close(sys_log_mcu.c:123-140) |
每条日志 2–4 次 NAND 页读写;UI 翻记录逐条 open/seek/close | 与 C3 日志管线合并评估(现仅 FIL static 化省 528 B 栈) |
W4 | 报告 N-16(≠ 本登记簿 N-16) |
| N-25 | 性能/资源建议簇:PASV 每次新建监听;NET_RECV_TIMEOUT_MS 30000;PHY 强制 100M 无自协商回退;NET_MAX_SOCKETS 8 与单连接语义不符;HAL_Delay(1) 阻塞 DE(DE 项随 B2 暂缓,见 暂缓-RS485.md) |
次级性能/语义一致性 | 逐项见 ../问题记录/项目审查与优化建议报告.md §4.2/§4.5/§4.7,随窗口评估 |
W4 | 报告 N-09/P2-8/PHY/P3-x/rs485 |
| N-26 | NAND 直 DMA 调用方缓冲(已加运行时守卫,阈值 1024) | CCM 缓冲被 DMA = 静默传错(与 ADC DMA 不可达 CCM 同类坑) | 补编译期/启动期地址断言 + 新铁律:堆缓冲不可被 DMA 直接寻址 | W4 | 报告 N-11 |
| N-27 | 内存优化簇:LVGL 池 + UI 两份缓冲 54,146 B 仍在 SRAM1,CCM 只剩 ≈8,160 B(2026-10-12 B5 堆扩容 48→56 KB 后) | R-2 后半段(迁 CCM)被堵死 → 后续功能预算看不清 | 三件套 ✅ 2026-10-12 落地(ram_baseline.py 四模式 + ram_baseline.tsv 趋势 + docs/内存管理/RAM预算台账.md + mem-budget 钩子 92% 门禁)→ W3 再做 R-9(LV_MEM_SIZE 40→16 KB,池水位门禁数据已具备)→ R-2 后半;R-3/R-4/R-5/R-6 逐项评估(R-6 前置已满足) |
W3 | 报告 R-2 剩余/R-3~R-6/R-9/§5.5 |
| N-28 | Flash 死代码评估簇:剩余 ≈10 KB(box_shadow 3,246 / draw_sw_img 2,960 / bin_decoder 1,972 / image_decoder 952 / triangle 930)+ 双精度 dadd 等 ≈1 KB;uvprojx 仍挂 201 个空 LVGL TU(F-1/F-2/F-3 已闭环,省的是编译时长) |
编译时长 + 文档噪音 | 逐项实测再关;⚠ mask/mask_rect/grad 是文字与矩形绘制必经路径,不可盲关 |
W4 | 报告 F-4/F-5/F-6 |
| N-29 | 仓库膨胀:.git 149 MB + 图片 36.3 MB |
clone/备份慢,且持续恶化 | 降采样 / 拆 submodule / LFS 三选一 + 一次 git filter-repo 历史重写。已决策(2026-10-11):暂不处理、登记观察——推送/协作前重评(届时未推送提交更少、重写代价最低) |
W7 | 报告 D-1 |
| U 簇 | UI 标准化:无令牌层/组件库/页注册表(手写 case 仍在),27 页未落地;golden 未挂 pre-commit、字符集差集检查仍是约定 |
新增一页成本仍是 8 处手工改动 | 按 ../问题记录/项目审查与优化建议报告.md §6.5:U4 残余(两脚本入门禁,可逢窗口顺带)→ U1 令牌层 → U2/U3 → 页面落地;U4 golden 可直接当 U1 验收工具。已确认(2026-10-11):本轮不排期,等功能主线出结果后按产品需求启动 |
W6 | 报告 U1~U5 |