Files
STM32F4-Base/docs/任务规划/登记簿.md
T
wandering1 617c84f570
CI / L0 静态门禁 (pre-commit) (push) Failing after 2m11s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 17s
docs: 文档去阶段化——清理"自愈收敛阶段 / L3 pending / 一期二期"标签
代码注释去阶段化已在 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。
2026-10-14 23:05:17 +08:00

13 KiB
Raw Blame History

登记簿(长期观察项;存量 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