Files
STM32F4-Base/docs/任务规划/登记簿.md
T
wandering1 a7f526569a perf(mem): R-9 落地——LVGL 池 40→16 KB,SRAM1 74.9%→56.1%
取值依据是实测水位,不是预估:菜单根框 5,368 B、开页-关页往返
5,448 B、最重页面峰值 6,568 B(占 16 KB 的 40%)、真机开机
used=3,192 B。注意 16,384 B 建池后 lv_mem_monitor 报的 total 是
15,020 B(TLSF 控制块与对齐元数据 ≈1,364 B),核算余量用后者。

两端 lv_conf.h 同步改值(lv-conf-sync 生效值比对 163 项 PASS),
Lib/lv_conf.h 的 UTF-8 BOM 已按原样补回(Edit 会静默剥掉)。

验证:
- @build 0 错 0 警;ZI 154,456 → 129,880,精确 −24,576 B
- SRAM1 98,144/74.9% → 73,568/56.1%(余 57,504 B);CCM 不变 87.9%
- 模拟器菜单回归 PASS(8 状态像素 + 池基线 5,368 B 未变);11 页
  黄金参考逐字节 10/11 一致,往返池水位 5,448 B 分毫未变
- 唯一差异 netcfg_save 保存态:用 40 KB 旧池做 A/B 复测同样失败,
  确认与本改动无关(属 506eccc 的 cfg_file 行为变化),未刷黄金
  参考掩盖,留给该改动属主处置
- @test PASS:fw build Oct 15 2026 07:31:34,无 [ERR]/Fault,
  开机 622 ms 到 net init: OK,menu build done: used=3192
- 本地 CI 全绿(L0 + L0.5,15 runner / 955 断言)
- 台账受管区与内存快照区已 --write 回填,mem-budget / mem-numbers
  由红转绿

连带结论:R-2 后半待迁体量 54,146 → 29,570 B,瓶颈由 SRAM1 换到
CCM(只剩 7,904 B);解锁链第 ① 步完成,下一步只差缩堆 56→32 KB
(B5 是反向扩容,缩回前须重跑 stack_report.py + 上板 min_ever)。

文档同步 20 处:本报告按修复即销项删除 R-9 行,并改写 §0.2/§0.3/
§0.4/§5.1/§5.2/§5.3/§6.4 与变更记录、去处表;RAM使用分析 §2.6.2
新增实测水位表、阶段 1.1 标已执行;台账 §3 解锁链、登记簿 N-27、
任务规划 README W3 行与链路图;UI 四篇、产品需求、内存内容分配
策略、运行与自检记录、项目部署环境要求、测试开发标准流程、
simulator/README、ui-verify skill 常量。顺带订正三处与脚本不符的
旧值:池水位常量 4784/4864 → 5368/5448、FreeRTOS 堆 48 → 56 KB。
2026-10-15 09:56:15 +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) ../网络/Net层阻塞模型架构设计.md(原审计队头阻塞阶段二)
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-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-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 一条刻意缺口(E-59 门禁下随 B2 暂缓,见 暂缓-RS485.md);app_cfg.h 未接线开关(C5)。⚠ lftpd_log.c 已随 N-19 删除并入 lftpd_auth.c(2026-10-11),不再是缺口 白名单不清 = "写了不编译"盲区仍在 随 B2 一并出白名单(--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 每次新建监听;PHY 强制 100M 无自协商回退;NET_MAX_SOCKETS 8 与单连接语义不符;HAL_Delay(1) 阻塞 DE(DE 项随 B2 暂缓,见 暂缓-RS485.md)。⚠ 原列的 NET_RECV_TIMEOUT_MS 30000 已随 2026-10-13「recv 语义主流化」删除(挂起 recv 模型),不再是待办 次级性能/语义一致性 逐项见 ../问题记录/项目审查与优化建议报告.md §4.2/§4.7,随窗口评估 W4 报告 N-09/PHY/P3-x/rs485
N-27 内存优化簇:R-9 ✅ 已落地(2026-10-15)——LV_MEM_SIZE 40→16 KB → SRAM1 由 74.9% 降到 56.1%(余 57,504 B);待迁 CCM 体量随之由 54,146 B 降到 29,570 B,而 CCM 只剩 7,904 B(RW_CCM 上限 65,280 − 57,376) R-2 后半段(迁 CCM)只差"缩堆"一步:堆 56→32 KB 可腾 24 KB → CCM 余 ≈31.9 KB ≥ 29,570 B。⚠ 2026-10-12 B5 是反向扩容至 56 KB(9 任务栈 + 队列实测需要),缩回前必须重跑 stack_report.py + 上板 min_ever 复测 三件套 ✅ 2026-10-12 落地(ram_baseline.py 四模式 + ram_baseline.tsv 趋势 + docs/内存管理/RAM预算台账.md + mem-budget 钩子 92% 门禁)→ R-9 ✅ 2026-10-15(实测峰值 6,568 B = 池的 40%,水位表见 ../内存管理/RAM使用分析与优化方案.md §2.6.2)→ W3 缩堆 → R-2 后半;R-3/R-4/R-6 逐项评估(R-6 前置已满足)。⚠ R-5 已判定不可行、从本簇剔除:CMSIS-RTOS2 freertos_os2.h 有 #if (configMAX_PRIORITIES != 56) #error,改小直接编译失败(为 480 B 改第三方包装层不划算) W3 报告 R-2 剩余/R-3/R-4/R-6/§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 235.3 MB(2026-10-14 实测;本行建档时记 149 MB)+ 手册图片 36.3 MB(受控文件合计仅 79.3 MB,.git 已是它的 3 倍) 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