Files
STM32F4-Base/docs/任务规划/登记簿.md
T
wandering1 2525c2d948 docs(104): 端口口径统一成「工厂默认」,登记「改后立即重 bind」待办
用户裁定两条:① 剩余裸写端口的地方加「工厂默认」限定词,不改固件行为;
② 生效语义按需求口径「保存即生效」定,现实现(端口下次重 bind 才生效)是
要改的一侧 → 建任务登记,本笔不动代码行为。

限定词(24 处 / 17 文件):AGENTS 数据主线、App/protocol/README、根 README
文档索引、Src/freertos.c 三处任务注释、docs/README、项目启动顺序管理、存储
架构说明、软件架构与运行时规格(2)、RAM 使用分析、产品需求设计文档(5)、
项目架构总览(3)、test/host/README、iec104_master 流程注释、IEC104 上行设
计说明、继电保护功能复现规划。配图两张同批重跑:gen_arch_svg.py 与
gen_memory_svg.py(脚本与产物同一笔)。

两处陈旧计数(都做过双源核证):
- 测试开发标准流程 像素层「60 内容页」→ 内容页黄金参考 66 张(64 页);
  双源 = simulator/tests/ref/shot_*.bin 实数 66 与 check_content_pages.py
  的 PAGES 66 条(含两个 _p2)。
- .pre-commit-config.yaml 的 uinav-selftest 注释「18 张黄金参考」→ 写成
  「接线当时 18 张、现 66 张」:git log -S 定到 6a904c1b(2026-10-25),那
  天 ref 目录确实 18 张,写时为真,但它描述的是钩子现有行为,属当前态。

口径修正与登记:
- 页面扩充详细方案「通讯设置 = 无配置模型(端口与 CA 都是 #define)」→ 标
  「当时」,并写明现已在 /config.ini 的 [comm] 段可配、UI 通讯设置页可改。
- 产品需求 §通讯配置:删掉「改后需重启生效」这句把两件事混为一谈的话,改成
  需求要求「保存即生效」+ 现实现(公共地址重启、端口下次重 bind)+ 指向登记簿。
- docs/任务规划/登记簿.md §1 新增「104 端口改后立刻重 bind」:含隐性耦合
  —— .serialtest/config.json 的必检锚点写死 listening on 2404,端口一改串口
  回归必假失败;改行为时要么锚点只查 listening on,要么由脚本注入端口。

复扫(旧形态归零判据)剩 20 处未带限定词,逐条定性为刻意不改:默认值定义处、
出厂模板与断言、usage 与 argparse default、UI 黄金参考显示值、台架主站地址
(同数不同义)、串口锚点、叙事句、引用关系图坐标。逐条理由见一次性台账。

门禁:check_doc_links --sections-strict 对 16 篇改动 .md 逐个 rc=0;
check_mermaid --all 31 文件 62 围栏新发 0;check_nested_comment --all 449
文件新发 0;check_bom_drift --all 99 个名单内文件无漂移;
check_generated_fresh PASS(25 生成器 / 21 一致 / 4 只减不增基线);字节体检
无新增 BOM / CR / U+FFFD / 行尾空格(三连空行与 HEAD 逐项相同 = 存量)。
/keil-build 0 错 0 警,Program Size Code=246720 RO=29836 RW=2052 ZI=149708
与凭证同码:本笔只碰注释与配图文字,无固件行为变更。
2026-10-30 15:40:27 +08:00

15 KiB
Raw Blame History

后续待办与长期观察登记簿

这里不放当前 UI 任务。 当前执行只看 UI补齐.md;本文件登记 UI 之后的工作、 等待外部条件的事项、独立立项和长期观察。推进顺序只看 docs/任务规划/README.md §2。

条目一律用语义短语标识;完成后删行并清理引用。§6~§9 是由原排期、送检、分道和 开放问题文件合并而来的唯一归属,不再在多处复制同一事项。

1. 网络(CH395F / net 层)

# 事项 发现 证据与现状 出处
队列往返基线待重验 队列往返基线(1223/988µs)在发送分块握手改造后的重验——队列往返测 DONTWAIT 队列全程;发送分块握手对该路径逐位不变 → 机制上无影响,但基线数值属分片时代,严格重锁需跑一轮 Phase 13(需 PC peer) 2026-09-22(发送分块握手收尾留档) 低风险:10ms/100ms 阈值余量 >8×;下次 Phase 13 窗口顺带重锁即可 链路延迟测试说明.md §6.4 队列往返行的注¹
网络负向场景台架验证 负向场景台架验证待办(拔线断链 / 芯片级 net_init 失败分支 / 短写压测;正常路径已实测零回归):① PHY 拔线负向测试——断链需断 DTU 侧线缆或关受管交换机端口;② 芯片级 net_init 失败分支(需 SPI 故障注入);③ 短写压测(需远显客户端 + UI 推流压力) 2026-10-03(台架拓扑 = CH395↔交换机,拔线操作受限) 待专项台架窗口 实机测试实施指南.md §10
reconcile 突发饿死 uiTask 对时 reconcile/relisten 突发(0~4s 窗)把唯一 BelowNormal 的 uiTask 压成同一任务 800ms+ 单串缺席(饿死型,非等待型——F3 返回点喂位射程外):8 连窗级 UI 缺席期间喂狗面本身未断(cf=0 seg=1)、uisn=0(不在 sink 段内)、uip 在途 307→1083ms 而 uis 峰仅 183ms——被拖的 1s 在 feed/port 纯计算段墙钟。2026-10-25 台架两轮分箱定案:同负载换 :7003 churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零,v1.1 口径 FAIL 面精确收缩)。处置方向 = 自愈设计 §11.3 脆弱点 1 实测样本并档「net 层跨上下文收口」项:优先级矩阵复核与 reconcile 突发分片让路两案并评;排期 = UI 完成后的第一项,与裸指针收口同批 2026-10-25(F2/F3 验收轮②,v1.1 判据下捕获) docs/测试说明/测试数据/boot_log_data/f3rounds_r2_probe_30min.log.gz(3 事件 8 行 + STALL 证据行 + 同行 PROF);对照轮 f3rounds_r1_7003_churn_30min.log.gz;机理归档 ../网络/网络自愈架构设计.md §4.6、../子系统设计/看门狗设计说明.md §11.3、../UI设计/UI_设计架构.md §5.8 ../算法/继电保护功能复现规划.md(裸指针收口项属主文档指针)
104 端口改后立刻重 bind 改了 [comm] 段 port 之后要求立刻重 bind(不等拆链重建、不等网络代次重建)——用户裁定 2026-10-30:需求口径按「保存即生效」定,代码语义是要改的一侧 现实现 = App/task/iec104_serv.c 的 s_bind_listen 每次现取 iec104_comm_port(),注释自陈「下次重 bind(拆链重建/网络代次重建)即生效」;连带隐性耦合:.serialtest/config.json 必检锚点写死 i104: listening on 2404,端口一改串口回归必假失败(要么锚点只查 listening on,要么由脚本把端口注入锚点) 属固件行为变更,需真机验证;本笔只登记不动代码 用户裁定 2026-10-30;docs/产品需求/产品需求设计文档.md §通讯配置、docs/测试说明/流程与规范/自动化测试流程.md
relisten 沉降段原语化受阻 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. 存储 / 日志管线

# 事项 发现 证据与现状 出处
dhara 重试自旋残留 dhara 重试自旋残留——try_recover() 的 DHARA_MAX_RETRIES(8) 自旋在坏块密集时仍可能长时间占用 defaultTask(喂狗点) 2026-10-02 低优先:现有 vol_lock + 喂狗节奏缓解;若台架再出"存储侧喂狗饥饿"再排期 Lib/dhara/map.c
可选全序列卷锁 可选全序列卷锁——现卷锁仅覆盖 syslog / cfg / lftpd 三条路径(vol_lock_wait(0) try 语义),其它潜在访问点(如 UI 读日志)未纳入 2026-10-02 待评估:先确认是否真有第二写者;无则关闭本项 App/fs/vol_lock.{c,h}

3. 硬件(V0.1 缺陷 → V0.2 改版项)

# 事项 发现 证据与现状 出处
双转换器无共同采样触发 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. 测试与验证基础设施

# 事项 优先级 问题与证据 处置方向 出处
CI 远端闭环未验证 CI 远端闭环未验证(runner 本机已就绪) 中 剩余两件:③ 推送远端跑一次两 job 闭环验证(跑通证据尚无留档,故仍按"未验证"对待);④ 第二机交叉验证(不同工具安装路径,验 DTU_* 环境变量方案,→ ../环境与部署/本地工具路径环境变量方案.md 变更记录 TODO)。①② 已就绪,见 ../CI/远程CI完整指南.md §0 仓库状态行 完成前提交前仍须在本地跑 scripts/ci_local.py 或 pre-commit run --all-files 自查(静态门禁唯一保障,不能因"已配 CI"而放宽) .gitea/workflows/ci.yml;../CI/远程CI完整指南.md;../测试说明/流程与规范/测试开发标准流程.md §9

5. RS-485、内存与仓库观察

# 事项 影响 / 现状 处置方向 状态 出处
rs485_task 白名单缺口 KNOWN_GAPS 白名单清理——现存唯一缺口 = App/task/rs485_task.c(RS-485 接线门禁未满足、刻意不接线,随 B2 暂缓,见 暂缓-RS485.md) 白名单不清 = "写了不编译"盲区仍在 随 B2 一并出白名单(--strict 供审计复跑) 结构债 报告 N 族残余(报告已删)
缩堆迁 CCM 后半(暂缓) 内存优化簇剩余:原报告缩堆建议的后半(缩堆 56→32 KB → 迁 CCM)· 同类三项 ⏸ 整簇暂缓(2026-10-15 用户裁定):没有功能在等这块预算,而搬迁要动 scatter、要逐条过 DMA 可达性清单、缩堆还要上板复测。⚠ 代价落在"以后加任务 / 抬栈 / 加堆"那一刻——CCM 只剩 7,904 B、FreeRTOS 堆 min_ever 8,464 B,届时 mem-budget 会先报警 重开条件见 ../内存管理/RAM使用分析与优化方案.md §4。⚠ 原报告另有一条已判定不可行(CMSIS-RTOS2 freertos_os2.h 有 #if (configMAX_PRIORITIES != 56) #error,改小直接编译失败),不再列入 暂缓 报告 R 族剩余/§5.5(报告已删)
仓库体积膨胀观察 仓库膨胀:.git 233 MB(2026-10-25 实测)+ 手册图片 36.3 MB(受控文件合计仅 79.3 MB,.git 已是它的 3 倍) clone/备份慢,且持续恶化 降采样 / 拆 submodule / LFS 三选一 + 一次 git filter-repo 历史重写(三项都不解决历史膨胀)。已决策(2026-10-11):暂不处理、登记观察——推送/协作前重评 仓库决策 报告 D 族

6. UI 完成后的编码队列

顺序 条目 要做什么 完成或关闭判据
1 net 层跨上下文收口 同批处理两件事:裸指针收口为状态查询 API;对时 reconcile/relisten 突发导致 uiTask 800 ms 以上连续缺席,评估优先级矩阵与突发分片让路 同类台架负载下不再出现目标饿死签名;网络与 UI 回归通过;证据写入网络与看门狗模块文档
2 网络性能资源建议簇 分别评估 PASV 重复建监听、PHY 强制 100M 无回退、NET_MAX_SOCKETS 与单连接语义不一致;DE 项随 RS-485,不在本项做。机理见 ../网络/Net层阻塞模型架构设计.md 与 Drivers/BSP/NET/README.md 每项形成“修改并验证”或“有理由不做”的结论;不为了清清单做无收益重构
3 dhara 重试自旋与卷锁评估 先确认是否仍出现存储侧喂狗饥饿、是否确有第二写者,再决定是否修改 有新证据才排修改;无第二写者则关闭全序列卷锁项
4 uvprojx 空 TU 观察 201 个 LVGL .c 中 127 个在 .map 零产出,但当前增量构建仅 4~5 秒;有全量构建耗时痛点时先补计时基线,再用 Keil 原生 <IncludeInBuild>0</IncludeInBuild> 可逆排除 有实测收益才保留改动;否则继续观察

RS-485 白名单随 暂缓-RS485.md 整簇处理,不列为 UI 后的独立编码任务。 并行写域、工作树与合并纪律统一见 docs/环境与部署/并行任务工作树方案.md。

7. 等台架或外部资源的事项

条目 需要条件 要做的事 去向
数据可信任务卡 ① 一台能出 50 Hz 正弦的交流信号发生器(手边即可,不等外部)② 子板实物或原理图 ③ 标准源 信号发生器动态波形验证 → 端子/子板变比确认 → 8 通道两点标定 唯一任务卡与验收在 数据可信.md §5
标准源送检与第三方 104 验收 两点标定完成、保护 VALID 置位、第三方主站 标准源注入判据全部通过;总召、周期、变位、遥控全流程通过;证据归档。送检窗口前 2 日冻结特性 ../子系统设计/IEC104上行设计说明.md §7/§8
队列往返基线待重验 台架 + PC peer 下次 Phase 13 窗口重锁基线 本文件 §1
网络负向场景台架验证 拔线、SPI 故障注入、远显压力条件 PHY 拔线、芯片级 net_init 失败、短写压测 本文件 §1
串口助手正路径补验 CH340 接入 补齐尚未覆盖的正路径 ../测试说明/测试工具/串口助手设计说明.md
CI 远端闭环未验证 runner 与第二台机器 验证远端两 job 闭环和不同工具路径 本文件 §4
UI 六页真机判据(记录 5 页 + 运行报告) 台架:NAND 里有真实事件记录、SD2506 电池域可控、104 主站可连 上板复核六件事:真记录翻页与掉电后保持、清除记录后对应页归零、上电一次看 boot_count +1、拔 RTC 电池后 seq_state 落 RESTARTED、IWDG 复位后 rst_cause 落 IWDG、主站连一次看 conn_up +1(模拟器侧这些记录文件无写入方、无 boot_stats、无 104 协议栈,黄金只拍得到空态「无记录」与固定假数据的显示口径) 六个页面模块文件头「台架待补」段 + ../测试说明/专项验证/模拟器差距清单.md §2.3 开机账本一行

送检顺序不可倒过来:产品构建当前要求 UA/UN/IA 的标定 VALID 全部置位才走保护判据。 未完成标准源标定就送检,保护会表现为不动作。保持该闭锁,不用非标准源标定走捷径。

8. 等立项或硬件代次的事项

条目 当前不做的原因 重开条件
保护元件 V0.1 可行子集 A 相涌流制动、突变量启动、无压无流闭锁、元件级校验和虽能设计,但没有标准源就无法验收,且保护仍在闭锁 标准源到位,且标定与闭锁验证完成
采集增强 等周波调频、零序通道、遥测谐波轨依赖可信工程量 标定完成后单独立项
跨转换器三相与功率类功能 两片转换器无共同采样触发,V0.1 上相位、功率、对称分量不成立 V0.2 硬件改版
开入开出与遥信配置 3 页 固件和 V0.1 硬件均无可配开入对象;出口还涉及 GPIO 安全电平、保持/脉冲和回读自检 开入开出作为独立模块立项,再与 UI 页面同批
故障录波 独立子系统,不是补一个页面——2026-10-29 已立项:卡片与判据 docs/任务规划/故障录波.md,设计与口径 docs/子系统设计/故障录波设计说明.md 已解除暂缓;执行按该文档 §3 顺序,UI 道互斥
104 文件传输(规约侧读文件) 录波取回走现成 FTP 已够用,规约侧文件服务是另一件事 送检或第三方交接需求明确后单独立项
SNTP 设置 当前对时走 8888 私有协议,SNTP 客户端与产品口径未定 SNTP 客户端立项
RS-485 整簇 用户决定暂缓 暂缓-RS485.md

9. 开放问题

问题 为什么还没答案 处理时机
是否在真实初始化点接入功能裁剪门控 旧占位宏没有消费者且已删除;是否需要真实门控属于产品定义,不是单纯代码问题 产品提出按配置裁剪需求时决定;决定前不新增空开关