wandering1
|
4ceb5b41e6
|
docs(任务规划): 故障录波卡片登记簿销项——判据并入设计说明后删除
用户指令(2026-10-30):确认录波任务完成度,把除实际操作之外的所有
步骤做完,然后删除规划文件,避免已完成的工作被误读为未做。
审计结论:代码面确已全部收口——wave_read.py --selftest 92/92、
三套主机单测 113/170/110 复跑全 rc=0、bench 自抓与 PC 读段脚本在仓、
数据可信/复刻明细/短板评测/UI 两处回写均已做过。**唯一未跑的是
板级台架那一轮(实际操作)**,判据不得丢,故先迁后删:
- 设计说明 §9 承接落盘道失败留痕名全清单(13+1 条,打印点现值
default_task.c:816/:831 实测核对)
- 设计说明 §10 承接原卡 2/卡 3 的板级段(触发来路一行、回放页
一行)与本波执行顺序图(mermaid,原规划 §3 逐字迁)
- §4/§11 头部定位、§11 尾注、§14 关系行改属主口径
- 全库 32 处引用改挂设计说明 §10/§9(18 文件):任务规划 README
独立行(顺带订正单测数 100→113 为实测)、登记簿、数据可信 ×2、
复刻明细、产品需求 ×2、ADC 注入 ×3、短板评测 ×2、页面补齐规划、
App/algo README、配图生成器注释、录波三套单测注释 ×6
- git rm docs 该规划文件;人类索引任务规划 6→5 个文件(沿革注照
屏板链路先例走裸句,不留反引号死引用)
验证:残留两形态(任务规划/故障录波、裸文件名)全树扫描 0;
mermaid 预检新发 0;doc-links 11 个被改文件逐文件 PASS;生成器
注释改动重跑产物逐字节不变(svg 60a0dd39e4);三套单测与
wave_read selftest 复跑全绿;18 文件 BOM/CR/U+FFFD 全零。
本笔不含固件编译单元(test/host 仅注释行与文档),构建留待合并
轮统一跑;板级轮启动判据与顺序见设计说明 §10。
|
2026-10-30 18:20:37 +08:00 |
|
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 |
|
wandering1
|
aed842e1f2
|
Merge branch 'v2-on-ui' into task/archsplit-sw-hw
# Conflicts:
# docs/架构设计/软件架构与运行时规格.md
|
2026-10-30 13:32:52 +08:00 |
|
wandering1
|
00fe66a029
|
docs(架构设计): 系统架构与硬件规格拆为软件与硬件两档,软硬件分治
用户裁定(2026-10-30):合档拆成两部分,软件与硬件不混排。
- 软件侧(新 §1~§6)= 分层 / 任务模型 / 就绪位表 / 启动时序 / 线程通信 /
工具链与工程约束 → docs/架构设计/软件架构与运行时规格.md
- 硬件侧(新 §1~§5)= 主控内存 / V0.1 引脚表 / 存储器件 / 版本兼容 /
能力边界 H1~H5 与量纲口径 → docs/架构设计/硬件规格与能力边界.md
- 旧 2.1 的 RTOS / 工具链 / CubeMX 三行迁入软件档 §6.1;旧 2.5 五条工程
约束归软件档 §6.2,SDIO 一条归硬件档 §5 H5(同事实不再两处并存)。
- 存储器件小节的 BBT / 单写者 / FatFs 三条细则不与权威档重复,改为指向
存储架构说明与软件档 §2。
- 引用重挂:AGENTS 引脚行→硬件档 §2;docs/README 3 处;需求档 7 处
(「架构硬件档」别名一分为二「软件架构档 / 硬件规格档」);复刻明细
2 处;section_aliases.json 两键改四键。
- 两档尾部各留裸号换算注(旧档号不带 §,避免与本文编号体系混淆、且
doc-links 自引用 strict 必拦);旧档名全仓零引用。
门禁:树内 check_doc_links --all --sections-strict 剩 35 处全部为
simulator/SDL2 联接「名称含空格」假红(主树同命令 rc=0 干净),本笔
文件新发 0;mermaid 预检新发 0;七文件 BOM/CR/U+FFFD 全零。
|
2026-10-30 13:08:44 +08:00 |
|
wandering1
|
4a4ad6bc5f
|
chore(全仓): @build/@test 旧文档别名清退为技能调用名
现状口径:/keil-build 与 /serial-boot-test 是 DSH 会话的技能调用名,
不是 shell 命令;「名 + 命令行参数」的命令形态改为可执行体
run_boot_test.py 的真实调用。
- AGENTS.md:别名说明重写为「技能调用名不是 shell 命令」,两条目改
「编译(/keil-build)」「串口回归(/serial-boot-test)」
- keil-build / serial-boot-test 两 skill 调用名与示例同步;task-worktree
方案文档去掉 @build/@test 惯例从句;@task 保留(不在点名范围)
- 123 文件现状陈述全改;台架捕获、变更记录/时间线、rename 映射输入
等 41 行历史证据保留旧名
- gen_memory_svg.py 6 处措辞随改,3 张 SVG 产物同批重跑
- 顺手补并行方案同行漏网计数 51→52 钩子
验证:提交期快钩子对 123 文件实跑全 Passed;check_doc_links --all
rc=0(3038 处、无法判定 0);check_mermaid --all rc=0;YAML 解析 52
钩子不变;skill-size rc=0;py_compile 全过;字节卫生零漂移。
|
2026-10-30 13:03:12 +08:00 |
|
wandering1
|
dc964090ea
|
docs(产品需求): 需求基线拆薄为三档(大厂标准),doc-links 增别名解析
产品需求设计文档.md v1.9 → v2.0(2691 → 1816 行):
- 新增 §2 背景·目标用户·典型场景·成功指标,§3.2 产品级非目标表,
§4 P0/P1/P2 需求总览(19 行);§9 收窄为缺口清单与推进顺序。
- 拆出 docs/产品需求/参考产品复刻明细.md(803 行):复刻基线 +
定值/遥测/开入开出/事件/元件/录波/记录/规约逐项差额与完成判据。
- 拆出 docs/架构设计/系统架构与硬件规格.md(215 行):运行时架构
(就绪位表/机制表/启动时序)+ V0.1 硬件规格;与项目架构总览
定分工——位表/机制表/时序图/引脚表以新档为准。
引用同步:AGENTS.md 引脚表指针改指系统架构与硬件规格 §2.2;
docs/README.md 目录树与索引四处重写;故障录波三处「录波采样率」
行指针改指复刻明细 §7;PRD §11 补两新档指针。
门禁工具:check_doc_links.py 裸名解析增别名后缀匹配(「见需求档
§5.16」形态),§ 链遇紧邻已登记别名换目标;section_aliases.json
登记 需求档 / 架构硬件档 / 复刻明细(档) / 产品需求设计文档 /
系统架构与硬件规格。
终验:doc --all rc=0(3038 处 / 可判定 80%);mermaid --all 64 围栏
0 命中;改动文件字节卫生全过;新旧逐行差集审计无丢行。
|
2026-10-30 12:36:31 +08:00 |
|
wandering1
|
314ebd2cfe
|
docs(屏板链路): 删除日志口联动的历史冲突描述行
- 屏板链路设计说明 §2 删「日志口联动」整行:现时态写成「共用 DR 会
互相插字节」的历史归因会误导新读者(现状两条流早已分家)
- 产品需求 §9.14 第三批行同步去掉同族机理括注,保留「第 16 条排在
10 之前:日志先腾出 USART1,屏板链路才能独占」的约束本身
- 端口归属现状另两档已有专述:产品需求 §4.2 表、控制台单写者日志
设计说明 §11;历史细节走 git log
|
2026-10-30 11:08:08 +08:00 |
|
wandering1
|
add61ca2af
|
Merge branch 'v2-on-ui' into task/screenlink-plan-to-design
# Conflicts:
# docs/子系统设计/控制台单写者日志设计说明.md
|
2026-10-30 09:25:35 +08:00 |
|
wandering1
|
8744c833e5
|
docs(屏板链路): 规划文档收编为设计说明事实源,全仓引用与端口口径同步
- 重写 docs/子系统设计/屏板链路设计说明.md:链路角色、串口与端口配置、
物理接线、协议实现口径、键值与状态灯映射、资源与耗时、对外接口、
已验证/未闭环、坑账本——只写现状事实,演进过程查 git 历史
- 删除 docs/任务规划/屏板链路.md(内容已全部沉淀进上述设计说明,
登记簿「完成即销项」;docs/任务规划/README.md 相应两行一并移除)
- 代码与主机侧测试的文档指针改指设计说明对应章节:
sb_link.h/.c、sb_proto.h/.c、sb_led_map.h、console_log.c、ui_task.c、
test/host 的 sb_link/sb_proto/sb_led_map 三套与两个台架脚本
- docs/README.md:设计文档索引行与设计说明描述更新,任务规划目录 7→6 文件
- docs/产品需求/产品需求设计文档.md:串口通道现状口径同步——第 11/12/13 条
已交付(4208 B 应答/状态灯掩码/键上行/双出口并发)、LOGO 下发出局不实现、
帧长实测固化、调试日志口 UART5/RS232#1(§4.2/§5.16/§6.6/§9.12/§9.13)
- docs/子系统设计/控制台单写者日志设计说明.md v1.8:全文端口口径由
USART1 同步为 UART5/RS232#1(CON_UART* 单点宏),ORE 机理标注跨端口
同因,时间线补端口迁移行;头部修订指针改为实际章节名
说明:本任务经用户显式授权在任务树内编辑 docs/任务规划/ 与产品需求基线
(铁律「单写者」豁免一次);主树合并后统一跑全量 check_doc_links --all。
|
2026-10-30 09:22:44 +08:00 |
|
wandering1
|
f754d59218
|
docs(测试说明): 按用途分六个子目录并同步全库引用
分层:流程与规范/ 单元测试/ 板级测试/ 专项验证/ 测试工具/ 测试数据/,
顶层只留新增的目录导航 README.md(归层判据 + 硬约束 + 本次处置记录)。
- 搬迁 28 个路径:测试数据三个目录 58 个文件为纯改名(R100,内容逐字节不变)
- 全库引用同步 124 个文件:AGENTS / docs 索引 / skills / 门禁注释 / scripts
- 门禁面:scripts/check_test_traceability.py 的 glob 改 rglob
(分层后不递归扫描=追溯门禁直接瞎掉)
- scripts/rename_ref.py:收尾的 ℹ 提示在 GBK 代码页抛 UnicodeEncodeError,
让进程以退出码 1 收场而改写其实已落盘(RC 与真实结果相反);改为把
stdout/stderr reconfigure 成 UTF-8,与 check_doc_links.py 等同法
- docs/文档规范.md §1.1 补「子目录文件过多时再分一层」;§3.6 补 rename_ref
搬整目录的两个实测坑:① 会改写目录内部文件的内容 ② 内部文件的 ../ 出链
不补层级(本次 23 个被误改的证据文件已按 HEAD 原始字节逐字节还原)
- docs/README.md §6 改为与六个子目录一一对应,并补登原先漏登记的
「启动日志原子性复验流程」一行
- .cubemx_survival_baseline.json:App/util/task_watchdog.c 的注释路径也随分层更新,
该文件是存活审计的 watchdog-module 漂移锚点,按脚本自己的提示跑 --write 重建基线
(实测重建后仅 watchdog-module 一条哈希变化)
- 铁律 4 例外(本次在任务树里改了单写者文件):AGENTS.md 与
.pre-commit-config.yaml 只被 rename_ref 改写路径字面量(后者全在注释行),
任务表块与钩子声明一字未动
验证:check_doc_links.py --sections-strict 覆盖全部 88 个改动 .md 全绿;
check_test_traceability.py 输出与主树逐行一致;196 个文本文件无 BOM、无新增
CR、无 U+FFFD、无行尾空白;陈旧引用面由主树 25 处降到 6 处(无新增断链)。
|
2026-10-30 07:16:07 +08:00 |
|
wandering1
|
b4588108ed
|
merge: v2-on-ui into task/screenlink-bench-serial (wave + screenlink)
|
2026-10-30 01:08:37 +08:00 |
|
wandering1
|
b49e226815
|
docs(配图): 菜单树总览改由生成器画,登记钩子扫不到的图
- 新增 tools/arch_diagram/gen_menu_tree_svg.py → docs/images/菜单树总览
.svg:43 节点 = 9 菜单 + 34 叶,30 已绑页 / 4 未绑 / 16 叶带密码门,
最深 4 级;读数由脚本现算,不在文档里另抄一份
- 生成器内嵌 NODE_SRC(= ui_menu_tree.txt 的 43 行节点):在仓库里跑会
与真值逐行互验、不一致 exit 1;generated-fresh 在临时目录重跑读不到
真值 → 用内嵌表,输出逐字节一致(实测临时目录产物同 sha256)
- 产品需求 §8.2 原先挂的是级联框显示几何图(画的是示例级联,从来不含
整棵树的节点),换成这张树图,并删掉「该图仍是 42 节点时代所画」的
补丁注
- 图形绘制流程新增 §2.1:登记 generated-fresh 扫不到的四张图 —— 两张
tools/refgraph 产物(引用关系图 / _模块,不在 gen_*.py 命名面里)+
两张手画稿(级联框总览、级联框几何计算)。钩子只扫
tools/arch_diagram/gen_*.py,这些图改了不会有人报警;再多一张先说清
为什么不能用生成器
- arch_diagram README 脚本一览加行
|
2026-10-30 00:25:03 +08:00 |
|
wandering1
|
557f1d042a
|
docs(计数): 录波落地后的全仓计数同步(套数/钩子/黄金/菜单/字库)
机器面先定真值,再逐处对齐文档;带日期戳的取数行只加「当时」不改数。
六个数(每条两个以上独立机器源互证)
- 主机单测套数 41 → 44(find test/host -name run_unit_test.py / 覆盖率总闸 --list /
基线 modules 条目三源一致;目录数 46 = 44 + common + __pycache__,两个数分开写)
- 有专属钩子 22 根(YAML 解析 -unit-test 后缀)⇒ 无专属钩子 19 → 22 套,并把
wave_ring / wave_store / wave_trig 逐名列进门禁台账 §6 第 4 条,18 / 19 / 22 三个数
改标「裁定当时 / 2026-10-28 / 2026-10-29 现值」
- 内容页黄金参考 60 → 66 张(simulator/tests/ref/shot_*.bin 实数 / PAGES 条目 66,
其中 2 个分页 → 页面 64);钩子显示名与门禁索引表成对改
- 菜单 42 → 43 行(9 菜单 + 34 叶)、已绑 28 → 30、未绑 4(ui_menu_tab.h 宏 +
g_menu_tab[] 末行 / ui_page_registry.h 的 UI_PAGE_MAP_COUNT + #page= 计数剔示例行)
- 中文字库 218 → 224 唯一字、313 → 319 字形(清单唯一码点 / .bitmap_index 条目数
含 notdef;224 + 95 = 319 成立)
- 钩子口径 52 声明 / 49 提交期实跑:只核不改,核对 AGENTS 与 YAML 解析一致
Lead 追加四处(wave-algo 按「AGENTS 只核不改」的指令交回我裁的部分)
- AGENTS.md 提交门禁节:41 套 → 44 套(两处)、19 套 → 22 套(两处,并把「与录波
三套」写进括注)、ui-golden 条目 60 张 → 66 张;52 / 49 的口径叙述与历史括号原样
- scripts/board_ui_nav.py 的自述 docstring:60 张 → 66 张
- test/host/sys_log_mcu/sys_log_mcu_test.c 注释:全量门禁 41 套 → 44 套(纯注释)
- 产品需求 FR-UI-2:需求原文「42 节点」保留不动,在实现行注「2026-10-29 实到 43
节点,42 是 V0.1 立项数」——需求基线不由实现方回改
刻意不动的(冻结面)
- 带日期戳的实测行(自动化测试流程、字库差集门禁、覆盖率口径里的 67 s / 25 s /
45 s / ~105 s 四个耗时)、保留变更记录的文档历史行、页面补齐规划里自写「完成即
冻结」的立项快照表、2026-10-28 那份分工说明、级联框总览.svg(42 节点时代所画,
无生成器,重画另开一笔)、三处伪命中(字体数据行、芯片手册、m2/m3 数据目录)
自查(真实退出码):check_doc_links.py --all RC=0(215 个文档、章节引用可判定 80 %,
合并后第一次全库零红);check_generated_fresh.py RC=0(22 张图 17 一致 / 5 条既有
BASELINE 豁免,生成物零改动);编号门禁 add 后复扫 RC=0;17 + 4 个改动文件字节体检
全绿(无 BOM / LF / 无 U+FFFD / 无尾随空白 / 单个尾换行)。
|
2026-10-29 20:04:24 +08:00 |
|
wandering1
|
d64bbdc57f
|
feat(wave): 故障录波数据面、接线与单通道回放页(软件闭环交付)
数据面(App/algo,纯逻辑,双端编译)
- wave_ring:8 路 × 320 点列优先环(1 kHz,预触发 160 + 后触发 160),adcTask
唯一写者;触发/冻结/封存/冷却四态,冻结持续到落盘回执才解冻,滞留 2 s 自弃
兜底——下一次真故障无波可录比丢一段更贵
- wave_store:段头编解码 + 拉模式打包游标 + 自带无表位运算 CRC-16/MODBUS(带
锚点自检)+ 段名与整段长度等式;格式不依赖平台类型宽度
- 段头只存原始码值与封存瞬间生效系数,工程量只当单位标签、不进任何算式
- 三套主机单测(环 113 / 编解码 170 / 触发状态机 110),全部无桩、生产源原样
纳入;新文件补 stddef 是 ARMCC 与主机差异,主机侧照不出这条分叉
- test/host/wave_read.py 是按 §6.2 的独立第二实现(dump/fft/shape/plot),92 条
自洽断言;三份合成段互读双校验全过、哈希钉死,格式面双向闭合
- 三套新单测不加专属钩子,由覆盖率总闸全量真跑(沿用既有裁定)
接线(任务层)
- adc_cal:新增生效系数的 32 位定点原值入口(与既有浮点入口共用生效视图),
段头按最低有效位精确记账,不经浮点回算
- adcTask:每拍压 8 路语义原始码值并推进状态机,封存那一拍同拍交棒封存瞬间事实;
台架定周期自抓走双层编译门,产品镜像里零存在;串口新增一条 wave: 周期行
- defaultTask:卷空闲后一次心跳整段搬完(try 锁 + 256 字节分片 + 一次完整开档到
关档),成败都回执;失败先删半成品再计错,段号只在成功时推进;持锁超 50 ms
补一条告警并记历史峰值(喂狗余量可核)
- Lead 复核补第四道并发陷阱:采集任务优先级高于落盘道,搬段中途它可能正好把滞留
超时的本段自弃、甚至封出下一段——数据区校验和是对「实际读到的字节」算的,
半新半旧的段照样自洽,故关档后复检环侧身份判废:删文件、不补账、段号不推进
- Lead 复核抓到触发挂号不是原子操作(旧实现分三个字节写,消费者可在窗口里读到
上一段的触发源与元件号):已把载荷压进一个字节,越界当场拒且不记任何计数;
段文件字节布局零改动,三份合成段哈希逐字节不变
- protectTask:保护启动上升沿同点请求录波,一拍一次、元件号取最低位;判据本体
零改动
人机(160×160 单色屏)
- 菜单树节点 26「手动录波」绑页面 + 记录查询组末新增「录波回放」叶,重跑生成器
得 43 节点 / 34 叶 / 30 已绑,页面映射 28 → 30
- 回放页一屏一路、触发点前后各一周波共 40 点、每点 3 像素阶梯线(只用水平与
垂直两种线段——单色屏斜线会被阈值裁掉);零点虚线、触发光标、窗口峰值、
单位徽标与形状受限徽标;空态与坏段各一句显式文案,绝不用半截波形冒充数据
- ui_data 新增录波注入通道(六件操作表、三态返回);执行侧胶水带段头缓存、
手动请求后连缓存一起作废、逐点走全仓唯一的码值换算入口
- 模拟器接真实环与编解码合成两段(含坏段与空态旗标),6 张新黄金参考,既有
60 张逐字节零漂移未用更新模式;字库 218 → 224 字 / 319 字形
- 两份图形配置里图表组件仍为关;零堆分配;页面池水位不变
- 回放读路径的 uiTask 阻塞上界按实码写清:一次渲染 = 段表刷新 + 未缓存段头最坏
22 次小读;已验段只剩一次开窗读 + 40 点解码;无实测数不编,实测归台架、
仪器用已在跑的单轮工作耗时探针,不新加埋点
台账与文档
- 内存台账:录波环与落盘/回放静态逐条入册,三档对照 81,536 → 88,296 → 89,936
字节(62.2% → 68.6%),累计 +8,400;预估 5.9 KB 与实测 +6,760 的差额点名;
散列文件头注释同步;任务栈表核对后无需抬栈;体积趋势行与同码凭证由权威构建
重打(0 错误 0 警告,四项体积与上一轮相同——本轮改动只有注释与声明位置)
- 设计说明:§5 补第四条并发陷阱;§6.3 定字段口径(两份独立实现的共同依据);
§7 回填实测;§9 周期行写实;§10 台架判据改两段式且不比绝对相位;§12 补读路径
风险行;抬头状态改成「代码面已交付、未做完的只有板级那一轮」
- 卡片:软件闭环一栏列证据;台架三条按用户裁定保持未完成,不做虚假销项
- 口径同步:数据可信、UI 补齐、页面补齐规划、产品需求、采集短板评测、任务规划
索引与两份 README;陈旧现状句清扫 16 处(带日期戳的历史取数行一律不动)
- 门禁说明:nested-comment 记仓库根探测必须兼容 linked worktree 的 gitdir 文件
形态(修前该钩子在任务树里恒报环境错、静默不可用);coding-standard 记
「函数头注释超过 24 行就把函数功能挤出回看窗口」这条机制与本次现场
- 覆盖率基线登记两个新覆盖模块(套件 41 → 44 套);环单测重打后该文件有效行
227 → 226、覆盖行 226 → 225,比率仍 99.6%,是分母变小不是覆盖率回退
为什么是单一提交:文档链接、双端注册、生成器幂等(菜单与字库)、内存数字与
体积事实源、编号门禁这五道整仓门禁要求代码、页面、菜单树、字库、文档与台账
同处一个提交才自洽,按数据面/接线/人机/台账拆成四笔必然红其中至少四道
编号门禁新增行 14 处命中已按语义改写:魔数常量按字符命名、段名样例改由格式串
生成、频谱表头改 f / 2x / 5x 并加一行图例;改写后自洽断言 92 条仍全过
|
2026-10-29 19:23:15 +08:00 |
|
wandering1
|
2c69a6ca07
|
docs(屏板): 订正 CRC 字节序口径(低字节在前)
写 1-1 时用屏板自己的算法复算了线上字节,发现文档里"CRC 高字节在前"的说法
与真实顺序相反,一并订正。
事实:屏板 Calculate_CRC() 返回的不是标准 CRC-16/MODBUS 值,而是高低互换后
的「线上字」("123456789" 它返回 0x374B,标准值 0x4B37)。于是
RS485_RefreshScreenCMD() 里 cmdbuf[4] = crc>>8(注释写"CRC校验高字节")
实际写出去的是低字节——两处命名都反,线上字节是对的(标准 Modbus 低字节在前)。
照字面实现会让屏板把每一帧都判成 CRC 错,而它的超时判定只看"收没收到一整
包"、不看 CRC,现场只表现为画面不刷新,极易误判成波特率或时序问题。
- 产品需求 §5.16.2:帧 A 表的 4/5 偏移改成低/高,补一段字节序说明与实测值;
帧 B 的 CRC 行、§5.16 的通道概述、实施清单第 11 条同步。
- 产品需求 §5.16.2:RT_CMD 周期 275 -> 280 ms(判据 RT_count > 55 即第 56
拍 x 5 ms;屏板源码注释里的 275 是少算一拍)。
- 屏板链路.md:4.2 的帧 B 布局与 0-3 的验收命令示例同步,并指向单测向量;
1-1 标完成。
|
2026-10-29 19:18:11 +08:00 |
|
wandering1
|
6531c4a4bc
|
chore(台架): 台架串口默认口改 COM3
日志口迁到 RS232#1/UART5 之后,台架那根线接在 CN1 的 RS-232 端子上,枚举
出来是 COM3;.serialtest/config.json 还写着 COM6,@test / @build /
serial-assistant 不显式指端口时就会去开一个已经没人说话的口,抓到空日志。
- .serialtest/config.json:portName COM6 -> COM3。
- 产品需求 §9.13:物理前置改成已完成口径,写明台架口由 COM6 变 COM3。
- 数据可信:资源图例里的台架串口同步成 COM3。
docs/测试说明/m2_data/README.md 里的 COM6 是 2026-09-22 那次运行记录,按当时
事实保留不改。
|
2026-10-29 19:04:08 +08:00 |
|
wandering1
|
27a700b0d8
|
docs(屏板): 删掉「日志口改 UART_MODE_TX」的说法
2026-10-26 已裁定不改 RX 配置,ORE 由 console_log.c 既有的 drain 预算与
300 ms 冷却兜住(docs/子系统设计/控制台单写者日志设计说明.md §4.4.1、§12)。
两处文档仍在要求把新日志口设成 UART_MODE_TX,会误导实现,直接删除:
- 屏板链路.md 批 0 的 0-2 第 ② 项、风险表「日志口又染上 ORE 锁存」整行、
验收清单第 0 条的「无 ORE 锁存」
- 产品需求设计文档.md 的 §5.16 硬要求 ②、端口重排第 2 条、
§9.13 第 16 条的第 ② 项
0-2 因此只剩「把 huart1 收口成一处端口宏指向 huart5」。
判据里的「无 ORE 锁存」一并去掉——ORE 是已知残余,不按它判。
|
2026-10-29 18:21:17 +08:00 |
|
wandering1
|
50c75eb516
|
docs(屏板): 批 0 日志口定为 RS232#1(UART5),落定 CN1 端子与适配器要求
2026-10-29 用户裁定:台架线走 ST_TX1 / ST_RX1 这一对,即 RS232#1,
对应 UART5(PC12 / PD2)。此前文档把默认日志口写成 USART2(RS232#3),
与这次裁定不符,一并改掉。
网表核对(docs/硬件平台/V0.1.tel 逐段可查):
PC12 -ST_TX1- U9.3 -> U9.6 -TX1- U13.11 -> U13.14 -RS232_TX1- CN1.12
PD2 -ST_RX1- U9.2 <- U9.7 -RX1- U13.12 <- U13.13 -RS232_RX1- CN1.10
由此落定三件事:
1. 台架端子:适配器 TXD 接 CN1.10、RXD 接 CN1.12、GND 接 CN1.7 或
CN1.8(CGND)。方向是交叉的——CN1.10 是板子的接收端。
2. RS232#1 没有 TTL 出口:ST_TX1 / ST_RX1 在网表里只连 U9 的 3 脚 /
2 脚与 MCU 两个脚,既无连接器也无测试点。唯一外部出口是 CN1 的
RS-232 端子,所以必须换 USB 转 RS-232 适配器;现有那根 TTL CH340
直连不了,接上去轻则不通信、重则打坏 U13 或适配器。
3. U14 是 RS232#3 的网口座(3 脚 RS232_TX3 / 6 脚 RS232_RX3),本通道
用不上。原文「改接 CN1(或 U14)」会把接线引到错误的通道上,删掉。
0-2 的目标端口随之从 huart2 收窄为 huart5(不再二选一)。huart5 现为
115200 8N1 / UART_MODE_TX_RX,业务代码无人使用,仅 Src/stm32f4xx_it.c:565
挂着 IRQ 入口;改 UART_MODE_TX 要在 .ioc 里做,Src/usart.c 是生成物。
改动面:屏板链路.md(决策二表、批 0 的 0-1 / 0-2、台架步骤 0、风险表各
一条)与产品需求设计文档.md 的 §9.13 物理前置段(原文同样写着「或 U14」)。
|
2026-10-29 18:14:44 +08:00 |
|
wandering1
|
f251162593
|
merge: task/data-trust-restructure 合入 v2-on-ui
任务:数据可信文档台阶化重构(含信号发生器动态波形验证方案)+ 故障录波立项。
两笔提交共 19 个文件:新增两份录波文档与三张配图的生成器,重写数据可信并同步
索引、登记簿、需求与 UI 状态行。代码一行未动。
主工作树在本次合并前压着四个并发会话留下的未提交项(三个 skill 文件、AGENTS.md)
与一个未跟踪目录(task-worktree 的 reference/),本任务全部未触碰;合并前后用
blob id 与 diff --stat 对账,证据在 ci-artifacts/ext-blob-before/after.txt。
跳过的 done 前置由以下证据逐项补回:merge-tree 预演打出结果树且 RC=0;两笔树内
提交已过全部门禁(doc-links / id-check-new / generated-fresh / gitlint);合并后
在主树跑全库 check_doc_links.py --all。
|
2026-10-29 13:20:05 +08:00 |
|
wandering1
|
d0e73d6553
|
docs: 录波立项波及的口径同步(索引、登记簿、需求与 UI 状态行)
任务规划 README 顺序表:录波从「当前不排」移到独立行;动态波形验证让位给录波
数据面(段文件是现成的样本出口)。
登记簿:录波与 104 文件传输拆成两行,前者解除暂缓并指向新文档。
产品需求:立项未排行、录波文件存储行、文件传输行、录波采样率行补偏离登记指针。
UI:页面补齐规划第 26 叶与 UI补齐「不做」表改指故障录波立项,旧重开条件已满足。
短板评测记录链行、ADC前端注入验证流程的读数出口注、图形绘制流程与
tools/arch_diagram/README 的生成器清单同步。
|
2026-10-29 13:19:12 +08:00 |
|
wandering1
|
93e057abf2
|
docs(屏板链路): 决策三改判为 uiTask 组帧 + 中断点 DMA 起发
用户问「那 200 ms 的阻塞一定存在吗」→ 逐条核屏板固件与主机侧观测面后改判。
- 拆名目:约 60 ms 是整帧的线上占用时间(硬),任务态轮询才是实现选择(可归零),
200 / 280 ms 是屏板自己的计时器,不是成本
- §1.3:DMA 从「不是必须的」改为「整帧不断帧的唯一保证」,补 USART1 TX DMA 现成、
全工程无人用、Stream7 无冲突的证据;缓冲必须落 SRAM 不落 CCM
- 决策三:采纳 uiTask 组帧 + USART1 空闲中断点 DMA 起发;不新建任务、不占堆,
看门狗位掩码不动。原否决理由换成「起发不能挂在有 portMAX_DELAY 等待的循环里,
抬优先级无效」——业务归属 uiTask 是对的,错的只是把起发挂在它的循环里
- 批 1 / 批 2 判据同步:起发在中断、整帧 59.6 ms 且无 2 字符以上间隙、组帧 ≤0.3 ms,
2-4 由建任务改为帧缓冲归属与 DMA 收尾
- §4.4 补三条「不要做」、§6 补五行风险、§7 补两项实测;周期口径 275 → 280 ms
- 需求文档 §5.16.2:200 ms 由「硬指标」改为软放弃计时,硬约束改为零间隙 /
正好 4208 B / 绝不让屏板溢出;补屏板实跑 705 882 bps(BRR=0x33,+0.84 %)
- 需求文档:时序表补第 41 / 56 拍与「有按键待报时最早 205 ms 再召唤」的撞总线窗口,
判据 8、FR-UI 判据与 §9.13 批次表同步 280 ms 与主机侧计数口径
|
2026-10-29 12:52:40 +08:00 |
|
wandering1
|
fb359af5f6
|
docs(屏板链路): 删除自我纠错叙述与冗余论证,文档只写现状
范围:产品需求设计文档 §5.16 全节(另清 §5.9 一处旧口径、
§9.13 一处旧阻塞)+ 方案文档 §0/§1.3/决策一/批 0/§5 收尾表。
删掉的历史错误叙述:
- 旧版本 BRR 推算写错那一整块(42 000 000 / 700 000 = 60 → 0x3C0);
- "PA10 未接线这条旧结论已撤销"三段 → 压成一句现状;
- "原四项未知已消解"三处、"上表保留作为取证过程";
- 调用契约表里四行已被屏板源码推翻的条目(下行长度、按键 TAG、
面板指示灯、背光对比度)与"四项未知消解"块;
- 上行表键号 1~10 就地改成语义正确的 1~9,不再用更正注解释;
- 待确认清单里已定版的帧长一条(5 项 → 4 项,重新编号);
- "第 14 条从待决定改为已决定不做" → 只写"已决定不做";
- §9.13 末尾"已消解的旧阻塞"整块;§5.9 "旧口径…作废" 一句。
压缩:readme 3208 B 冲突注 5 行 → 4 行;16 B/29 B 论证 15 行 → 6 行。
顺带修掉上一轮删除后留下的三处悬空表述("比换收发器便宜"、
"原来的速率死结因此消失"、"§0 第 2 行")。
刻意保留:屏板固件源码符号与常量(275 ms / 200 ms / 4208 B /
700000 8N1 的出处)、UART4 冻结簇那一行与"为什么是 USART1"的
选型依据——它们是依据不是历史。
口径依据:docs/文档规范.md 已裁定"新文档不再设变更记录节,
文档只写现状"。
核验:doc-links --sections-strict 两份文件均 RC 0(161 处章节引用,
98 % 可判定);新增行编号门禁 [OK];无 BOM / CR 0 / U+FFFD 0 /
无连续空行 / 单个 LF 结尾;表格列数与 HEAD 逐项比对 0 处不一致。
净变化:需求文档 +36 −73,方案文档 +7 −9。
|
2026-10-29 11:16:19 +08:00 |
|
wandering1
|
511fd30cc6
|
docs: 清理全仓变更记录流水(43 篇整节删 / 23 篇留一行 / 5 篇保留)
用户裁定:文档只写现状,历史流水一律删掉,过程查 git log。
- 43 篇「变更记录 / 修订记录」整节删除:继电保护规划 12.6 KB、产品
需求 11.8 KB、项目部署环境 5.5 KB、BSD Socket 指南 5.3 KB、架构
总览 5.0 KB、实机测试实施指南 3.8 KB 等
- 23 篇别处仍有指向:只留节名 + 一行「本文件不再记流水账,过程查
git log」,节号与锚点不位移(doc-links 不因此断链)
- 5 篇整表保留(被当唯一证据 / 活台账引用):看门狗设计说明、配置
文件设计说明、RAM预算台账、内容页架构、本地工具路径环境变量方案
- 规范同步:文档规范 §5.1 改新裁定;测试文档模板规范删示例节与
登记句;测试开发标准流程 / UI 两篇 / 实机测试实施指南 / 四篇单测
说明 / 并行任务工作树方案 / 编号规范 的「登记变更记录」改「写进
正文」
- 技能同步:stale-doc-count-sweep / ui-verify / id-family 三个 SKILL
正文不再要求追加流水行(顺带消掉 SKILL.md:121「产品需求 §12」
失效引用)
- 修 5 处悬空指针:采样有效性校验目录锚点、BSD 指南「文末变更
记录」、docs/README 过期描述、网络自愈架构两处指向面
72 篇文档净减 600 余行;check_doc_links --all --sections-strict 可判
定比例 61% → 78%、失效引用 0;静态门禁 passed=50 failed=0;gitlint
10 条历史提交信息 0 failed。
未提交他人在飞改动:.dsh/skills/keil-build/*(%SystemDrive% 守卫)。
|
2026-10-28 22:00:34 +08:00 |
|
wandering1
|
8f8d97b3d8
|
docs(编号): 批次六余账文档面——CubeMX 层号、双写疤、采集链旧层名共 61 站点
CI / 静态门禁 (pre-commit) (push) Failing after 8m4s
CI / 主机侧单测 (MSVC) (push) Successful in 27s
- CubeMX 防丢失三层优先级 L1/L2/L3(批次 3c 漏网 30 处):看门狗设计说明 25、
门禁说明/cubemx-survival 3(含「优先 L1/L2」→「优先写进 .ioc 与搬进 USER CODE
区」)、ADC通道映射 2。
- 改名遗留的中文重叠双写 14 处:菜单页面设计「一级菜单菜单」×6、「二级菜单菜单」
×2;README「语义取数与有效性」重复;存储架构「3字节字节地址」;链路延迟
「队列往返队列往返」;继电保护「出口出口与记录层」;产品需求「全周傅氏相量」重复。
- 采集链旧层名 5 处:「L2 相量层」→ 全周傅氏相量、「L0 采样驱动」→ 采样驱动层、
「L2-x 前缀」→ 相量输出标签前缀、「L1 层 v2.3」→ 语义取数与有效性层 v2.3。
- UI 菜单层级 2 处:产品需求「4 级(L0~L3)」→「4 级(主界面 / 一级 / 二级 /
三级菜单)」、「主界面 (L0)」→「主界面」。
- 登记簿条目改名「L5 队列往返基线待重验」→「队列往返基线待重验」+ 引用侧 5 处
同步(登记簿 §1/§7、实机测试实施指南 §7.3 与步骤表、编号规范 §1 好例子清单——
那个混在短语里的 L5 恰恰是个坏例子)。归档里的历史 note 原文不动。
- 归档 §10.3:四族收口记录 + 边界与裁定(peer JSON 键属冻结证据 schema 不改;
REQ2FIRST / FULLFRAME 不并入 FRAME_RT;L1-3/L1-4 属不可还原死号,就地删号留
事实;「原 L2 基线 3/10」按上下文读作主机侧回归的早期基线)。
- 判族保留(永久):硬件位号与封装尺寸 27 处(网表 L1~L3 磁珠电感、
SOT-23_L2.9-W1.3、CRYSTAL-L3.2)、芯片手册原文 3 处双写;伪命中 4 条没删
(「遥测量 测量值」「已登记登记簿」「谁来监视监视者」×2)——那些是正常词组。
- 门禁:check_doc_links --all --sections-strict 通过(195 篇、章节引用 3292 处);
git diff --check 干净;逐文件 BOM / U+FFFD / CRLF 与 HEAD 一致。
|
2026-10-28 18:57:03 +08:00 |
|
wandering1
|
842d711ed6
|
refactor(编号): 测试验证层级去号——CI job / 门禁输出 / 命令行旗标换语义名 + ASCII 段名
用户裁定「我不想看到编号」。测试验证层级这一族的整族清退分三道并行:本笔是**代码与 CI 道**
(CI 步骤与门禁输出面),代码注释面另走、文档面由文档道走。
口径(旧 → 语义名 → ASCII 段名,段名只进日志/旗标/job id/文件名):
L0 静态门禁 static | L0a 钩子解释器预检 preflight | L0b 提交信息门禁 commitmsg
L0c 体积门禁 size | L0.5 主机侧纯逻辑单测 host-unit | L0.5c 覆盖率 coverage
- scripts/ci_local.py 43 站点:段标题与 [SUMMARY] 标签改 ASCII 段名(static: /
host-unit:),函数 run_l0/run_l05 → run_static_gates/run_host_unit_tests,
收尾「已跑:」列表用段名。旗标改 --static-only / --host-unit-only,**旧旗标
--l0-only / --l05-only 保留为 argparse 别名**(肌肉记忆与既有脚本片段不断档,
实测 --help 两名列出)。
- .gitea/workflows/ci.yml 42 站点:job id l0-gates → static-gates、
l05-host-unit-tests → host-unit-tests;步骤名与 step-summary 标题改语义名;
日志名 l0-pre-commit.log → static-pre-commit.log、l05-<模块>.log →
host-unit-<模块>.log;::error::/::notice:: 文案同步。yaml.safe_load 核过
两个 job id 与步骤名。
host-unit-tests;步骤名与 step-summary 标题改语义名;日志名 l0-pre-commit.log →
static-pre-commit.log、l05-<模块>.log → host-unit-<模块>.log;::error::/::notice::
文案同步。yaml.safe_load 核过两个 job id 与步骤名。
- 门禁脚本 18 站点:check_registration(登记簿理由串 7)、check_test_coverage 5、
README 8、check_generated_fresh 2、ram_baseline 2、check_size_gate 1、
ci_find_python.ps1 2、ci_runner_bootstrap.ps1 2、.pre-commit-config.yaml 2、
requirements.txt 1(保持纯 ASCII)。
- skills 7 站点:task-worktree(含 [SUMMARY] 样例两行)、mem-budget、ui-verify、
task_worktree.py 的实跑标签。
- AGENTS.md 3 站点:CI 段「只跑静态门禁 + 主机侧纯逻辑单测」、自查命令段、
「2026-10-11 静态门禁全灭」事件名。
- 归档:编号治理历史.md 新增 §10 换算表 + **撞族警示**(同形 L0/L1/L2/L3 还属 UI 设计
令牌层 / UI 菜单层级 / 采集链 / 链路时延段 / CubeMX 三层 / 硬件位号与 FTP 应答字面量
等六个族,其中 6 处在字符串字面量里,改了就是改行为——故全程只按行内置换、先判族)。
- docs/产品需求 §7.4 测试分层表:去号 + 顺带修掉上一批**错族替换疤**(该表 L1/L2 行曾被
采集链层名「语义取数与有效性 / 全周傅氏相量」「保护判据」顶替,现按内容改写为板端测试
套件 / 主机侧回归两行)。同文档 §1.5 G5 判据行同步。
门禁:ci_local --help 两面旗标并列;py_compile 7 个 .py 全过;yaml 解析通过;
check_ids_new --worktree rc=0;git diff --check 干净;17 个改动文件 FFFD=0、无 CR、
BOM 与原文件一致(含 requirements.txt 纯 ASCII)。本族无机器识别面(单字母+数字是
新增行门禁的自述盲区),口径来自自建逐行扫描器,复扫本族形态归零。
- 交接说明:文档道 teammate 在改 CI 指南时中断,剩余 9 处双写疤与 29 处 CI 标识
(job id / 日志名 / 汇总行字面量)由 Lead 接手改完,逐处仍走断言式行内置换。
|
2026-10-28 17:46:52 +08:00 |
|
wandering1
|
dc214e1426
|
docs(UI): 内容页黄金参考当前态改报「60 张」,三数按双源实测同步
三数实测真值(每项两个独立来源互证):
- 张数 60:simulator/tests/ref/ 入库 shot_*.bin 实数 60 =
check_content_pages.py 的 PAGES 条目数 60(id 逐一对齐)。
- 已绑 28 叶 / 未绑 5 叶:ui_page_registry.h 的 UI_PAGE_MAP_COUNT 28 =
ui_menu_tree.txt 剔掉文件头注释示例行后的 #page= 实数(不剔是 29)。
- 字体 218 唯一字 / 313 字形:ui_cn_chars.txt 唯一码点 218(ASCII 区 0
个,ASCII 0x20~0x7E 由生成器子集参数另计、不算进字数);
ui_font_cn_12.c 的 .bitmap_index 条目 314 条含 notdef,剔掉 notdef →
313 = 218 + ASCII 95。
口径更正(数字一律不动):当前态计数单位由「页」改报「张」——张数 =
页面个数 + 分页页多拍的第 2 屏(runreport_p2 / sparam_p2 两张),两个数
不许互相冒充。同日先前那行「53 → 59 页」是页面个数口径、与判据本体
不同源,原文冻结不回改,只在各文件变更记录末行追加当日更正。
历史一律冻结:变更记录里的 27 / 40 / 47 / 53→60 / 59 与字库 122/217、
179/274、185/280、183/278 都是当日快照,只追加、不回改。
夹带说明:.pre-commit-config.yaml 一并入本笔——pre-commit 要求配置本身
已 staged 才允许提交;该文件的改动是 ui-golden 显示名(60 页→60 张)与
一条钩子计数口径注释(同日 51 → 52 → 51 净零,属另一类,已在此点名)。
|
2026-10-28 15:33:42 +08:00 |
|
wandering1
|
593c5d0c84
|
refactor(编号): 采集链分层 L1/L1.5/L2/L2.5/L3/L4/L5 → 语义名(批次 1)
用户裁定(2026-10-28):L1/L1.5/L2/L2.5/L3 这套层号「谁能看懂」,改用语义名。
映射(同一批定稿,含 L4/L5):
L1 → 语义取数与有效性
L1.5 → 标定折算
L2 → 全周傅氏相量
L2.5 → 测频与遥测快照
L3 → 保护判据
L4 → 出口与记录
L5 → 动作留痕
实测规模:384 站点 / 62 文件(App/algo、App/task、test/host 六个套件、docs/算法、
产品需求、架构总览、启动顺序、ADC 采样节拍、IEC104 上行、采集短板评测、内存管理、
AGENTS.md、README.md、docs/README.md、.pre-commit-config.yaml 与 scripts 里的注释)。
改法(不是全局替换,逐模式有上下文规则):
- 先吃同位语再落裸词:L1 有效性校验 → 语义取数与有效性校验、L2 相量层 → 全周傅氏
相量层、L3 保护 → 保护判据、L2.5 遥测快照 → 测频与遥测快照,避免「保护判据保护判据」
这类重复(第一版就是这么坏掉的,已整体回滚重做)。
- .c/.h 只改注释:先把字符串字面量切出去(引号数为奇数的跨行注释按整行处理),
C 字符串里的 L2-in ring 之类原样保留——AGENTS 铁律「字符串字面量必须纯 ASCII」。
- 层内条目号(L1-3 / L2-3 这类)**本批不动**,属批次 2;另外三族(UI 菜单层级
L0~L3、链路延迟分段 L1~L8、CubeMX 防丢失三层)也不动,属批次 3。
- 顺手修的措辞:范围写法 L1~L3 → 「分层(语义取数与有效性 → 保护判据)」、
CI 段「不含 L1/L2/L3」→「不含采集链分层」、目录地图里同一处并列表述。
验证:@build 0 错 0 警(Code=236456,与改前逐字节同尺寸——纯注释改动);
内存布局配图已按新脚本重生成(自检通过);doc-links --all --sections-strict 通过
(195 文档);mojibake / bom-guard / coding-standard / 新编号门禁自查 全 rc=0;
git diff --check 干净。
|
2026-10-28 13:04:02 +08:00 |
|
wandering1
|
cbb4fdb893
|
docs(产品需求): UI 现状同步——绑定 28 叶、黄金 60 页、字库 218/313
补上此前被并行会话丢弃的那轮同步(我在 94b0d790 里改过、随后随未提交稿一起消失),
这次落在当前版本结构上,逐项按实测真值改:
- §8.2 绑定现状:已绑内容页 28 叶 / 未绑 5 叶,页面注册表 UI_PAGE_MAP_COUNT = 28
(2026-10-28 实测);未绑 5 叶 = 无开入硬件 3 + 手动录波 1 + SNTP 1,
取舍与重开条件指向 docs/任务规划/UI补齐.md §5。
- §8.3 内容页:已绑 28 页;分组表补两行——记录查询 5 页(每记录 2 行、空态显无记录)
与运行报告(13 行分 2 页、四个数逐个挂范围标签);未绑段去掉已落地的当前执行 6 项;
像素黄金 53 → 60 页(+7 张,含运行报告第 2 页那张)。
- §8.5 中文字体:当前态改 218 唯一字 / 313 字形(实测 ui_cn_chars.txt 218 个字符,
字形数 = 字符数 + ASCII 0x20~0x7E 共 95);122/217、179/274、185/280 标注为历史快照。
- §5.14 FR-SOE-3:由「展示层待补」改「软件面已落地;真机判据待台架」——写清七类文本
记录 + 二进制 SOE、记录类型即日志 ID 本身、运行报告四个数的真源与下发通道,
并把软件面已满足(空态与标签由 60 页黄金钉住)与待台架复核(真记录翻页、掉电保持、
清除后归零、boot_count 自增与四态)分成两段,不混成一个已完成。
- §2.4 立项未排去掉已交付的记录 5 页;§9.1 差距表 UI 记录页行改写现状与去向;
§9.2 顺序表第 1 行改「清单已清空(2026-10-28)」、第 2 行改「下一顺位(未开工),
切换条件已满足、开工待用户点头」。§12 变更记录加一行(不 bump 版本号,v1.6 之后)。
验证(实测):check_doc_links --all --sections-strict 通过(210 个文档);
check_ids --strict 校验 1~6 无错误,可判定 7006/8039 = 87.15%(基线 86.0%),
不可判定 1033 处(上限 1166,本笔未增加);check_bom_drift / check_mojibake /
git diff --check 均 rc=0。纯文档,不涉及构建与真机。
|
2026-10-28 12:00:33 +08:00 |
|
wandering1
|
e94ce92c9f
|
docs(产品需求·屏板链路): 提交用户的两处删除,并把删除留下的引用衔接补平
删除由用户本人在并行会话里做,本笔按「整理并收工提交」指令代提交;
Lead 只做引用衔接与形态整理,未改其结论。
产品需求设计文档 §2.4.1 范围外表删掉「屏板(板件本体)」一行后,X 表实为
X1 双核分工 / X2 工具链 / X3 一次设备接口 / X4 独立计量通道。正文里 14 处
仍按旧号引用(旧 X4 指一次设备、旧 X5 指电度、X1~X5、X4 / X5、X1~X3 等),
已逐处按新号改写;变更记录里 v1.2 / v1.3 等历史行按「冻结不回改」保留旧号
(口径 docs/编号规范.md §5.5)。
两处依赖「屏板本体是范围外项」的表述随之改写:屏板链路已从范围外项移入
范围内待做(规格 §5.16,执行规划 docs/任务规划/屏板链路.md),主机侧链路与
参考 1:1 同构、不属替代方案;不在本仓实现的只剩屏板板件硬件本体(独立工程
DTU-LCD)。§9.1 解除表的「算力 / 形态」行同步去掉对已删行的引用。
屏板链路.md:§0 风险表删掉「250 kbps 收发器上限」(已解除)与「PA10 未接线」
(已撤销)两行后,剩余两项重编号为 1、2;表格单元补一个空格成「竖线 空格 号」
形态,与全仓表格写法一致。
验证(实测,纯文档不涉及构建与真机):check_doc_links --all --sections-strict
通过(210 个文档);check_ids --strict 校验 1~6 无错误,可判定 7006/8039 =
87.15%(基线 86.0%),不可判定 1033 处(上限 1166;本笔 +3 来自改写后的号提及);
check_bom_drift / check_mojibake / check_coding_standard 与 git diff --check
均 rc=0。
|
2026-10-28 11:48:12 +08:00 |
|
wandering1
|
f50e74c63b
|
docs+log: 撤销"PA10 未接线"结论,ORE 机理改为"RX 使能却不读 DR"
用户反馈:PA10 这个端口是接线的,当年那个分析应该是错的。
核查确认:console_log.c(文件头与 con_uart_reinit() 注释)和
控制台单写者日志设计说明.md 12 节里的"PA10 悬空 / 未接线"是 2026-10-02 的
归因推断,不是实测,且与用户确认的接线状态相反。
ORE 的充分条件本来就不依赖引脚悬空:RX 使能了却从不读 DR,
线上任意一个字节或一个噪声沿使 RXNE 置位后无人读,下一个事件即锁存 ORE
(常伴 NE/FE/PE);而 ORE 只能靠"先读 SR 再读 DR"清除,所以永不自愈。
引脚悬空只影响发生率,不是必要条件。
当年那场风暴的真因仍待定:接线正常时更常见的是对端波特率不匹配
(适配器不是 115200)或适配器 TX 在 USB 掉线时浮空。下次复现先量
适配器 TX 的空闲电平与波特率,不要再默认"引脚悬空"。
改动:
- console_log.c:函数注释改按正确机理表述;修改记录加 2026-10-28 一条
说明归因更正。纯注释,Code 236456 B 与上版一致,@build 0/0。
- 控制台单写者日志设计说明.md 12 节:机理段后加更正块,写明观察与缓解
措施仍成立、只有归因需要改写。
- 产品需求文档:4.2 表 USART1 行改为"PA10 双向均已接线";5.16.2 的
"PA10 没接线"警示块整段重写为"旧结论已撤销 + 真正机理 + 两条硬要求"
(屏板链路必须消费 DR 并在错误回调清 ORE;新日志口仍设 UART_MODE_TX);
9.13 前置阻塞由"两条物理前置"改为"一条物理前置 + 一条实现纪律";
12 节加 v1.9。
- 屏板链路规划:0 章第 2 行标为已撤销、执行顺序去掉"接 PA10";
批 0 由 4 项减为 3 项;批 1 第 3 项判据补"拔插 TX 线制造噪声后能自动
恢复";风险表把"PA10 没接"换成"一次噪声后链路永久静默"。
- 任务规划 README 独立轨道行同步为两条前置。
体积凭证随索引刷新(scripts/size_attestation.json),数字未变。
|
2026-10-28 10:41:32 +08:00 |
|
wandering1
|
eb2c454aed
|
docs(产品需求): 端口重排——屏板占 USART1,日志迁 RS-232 通道
用户裁定:现在的日志串口让给屏幕,RS-232 通道以后用来输出日志。
这条裁定把原来的头号阻塞直接消掉了:屏板改走 USART1(PA9/PA10),
是唯一一条 MCU 引脚直出 TTL、不经收发器的通道,所以 U15 = TP8485E-SR
只有 250 kbps 这件事对屏板链路不再构成约束,也不用改任何硬件。
顺带纠正一处算错的波特率分频:
- 旧文写 42 000 000 / 700 000 = 60 -> USARTDIV = 60.0、BRR = 0x3C0,
漏了 16 倍过采样,照此写实际只有 43 750 baud。
- 正确:USART1(APB2 84 MHz)USARTDIV = 7.5 -> BRR = 0x0078;
APB1 实例(42 MHz)USARTDIV = 3.75 -> BRR = 0x003C,误差均 0。
端口归属按 V0.1 网表 §4.2 的三对 UART 轮换核实:
RS485#4 = UART4(DE = PA15)、RS232#1 = UART5、RS232#3 = USART2。
所以 rs485_init(&g_rs485, &huart4, ...) 是对的,不动;屏板链路规划 v1
里"网表自相矛盾"那条判断依据错了(拿 V0.0 摘要行对 V0.1 代码),已纠正。
产品需求文档:
- 5.16.2 补端口裁定块与分频更正,重写"主机侧端口选型"为"端口重排"。
- DE 口径改为 TTL 直连无 DE;主机 RX 由"吃 4208 B"改为"只需 6 B"。
- 4.2 外设接口表补 USART2 / UART5 两行,USART1 行注明 PA10 未接线。
- 9.13 新增第 16 条"日志口迁移",批次表注明 16 必须排在 10 之前
(两者共用 USART1->DR);第 10 条改 BRR = 0x0078、无 DE。
- 12 变更记录加 v1.8。
屏板链路规划:
- 0 章由"三个硬约束"改为"一条已解除 + 四条前置",执行顺序钉死为
接 PA10 -> 挪台架串口线 -> 迁日志口 -> 再写屏板链路。
- 决策一、二 标记已裁定;批 0 换成"腾位置"4 项;批 1 的 DE 项降为
条件项,新增"日志口迁移"的改动点与判据。
- 5 章台架步骤补第 0 步;6 章风险表换成迁移期的新风险;7 章加判据 0。
任务规划 README 的独立轨道行同步为"端口已裁定、剩三条物理前置"。
|
2026-10-28 10:22:37 +08:00 |
|
wandering1
|
fec0052865
|
docs(任务规划): 新增屏板链路执行规划,并记下 700 kbaud 的硬件阻塞
新增 docs/任务规划/屏板链路.md:让主机跟 DTU-LCD 屏板真正通信的
执行级规划(需求侧仍在产品需求文档 5.16 与 9.13,不重复)。
核查后发现三个必须先解决的硬约束:
- 本板唯一 485 收发器 U15 = TP8485E-SR,手册上限 250 kbps,而屏板
固件写死 700 kbaud,差 2.8 倍。这是唯一可能让整件事搁浅的点。
- 4208 B 帧在 250 kbps 下需 168.3 ms,已占满屏板 200 ms 应答窗口的
84%,无实用余量;留 50% 余量需 >= 500 kbaud。
- 现有 rs485 驱动装不下长帧:RS485_RX_BUF_SIZE 与 RS485_TX_MAX_LEN
都是 256,4208 B 会被直接判 BSP_ERR_PARAM。
规划要点:
- 四个决策(波特率与收发器、端口、宿主、键值 9/10 语义),其中
波特率给 A 换器件 / B 屏板降速 / C TTL 直连三条路及代价。
- 分 4 批共 18 项任务,每项带改动点与判据。
- 端口建议:USART2 软件最优(DMA1_Stream5/6 空闲),USART3 硬件最顺
(U5 子板连接器直连 TTL)但 TX DMA 被 SPI2 占用。
- 宿主用 xTaskCreateStatic(configSUPPORT_STATIC_ALLOCATION=1),
不占已满的 RTOS 堆;栈 768 B,不进看门狗必需位掩码。
- 主机侧 RX 只需 16 B(屏板只发 6 B 召唤帧),别照抄屏板的 4208 B。
- 台架五步,先用 TTL 把软件全部跑通再等硬件决策。
- 复用 ui_net_sink_get_lcdmem / ui_net_sink_inject_key,不改
ui_net_sink.c,也不改 rs485.c 的常量。
同步:
- 产品需求文档 5.16.2 补 700 kbaud 硬件阻塞警示与出处。
- 产品需求文档 9.13 加执行细则指针。
- 任务规划 README 导航表与 2.0 顺序表加独立轨道一行。
- docs/README.md 索引计数 5/6 -> 6/7 个文件。
|
2026-10-28 10:11:36 +08:00 |
|
wandering1
|
11b4b2af70
|
docs(产品需求): 单色口径——删除多色协议,INIT 应答 29 B 改 16 B
屏板是单色面板,多色协议不对齐。核查参考源码后确认这不是让步,
而是删死字段,三处证据:
- RemoDispBus.h:46 CN_RDISP_TYPE_MONO = TRUE,LCD_TYPE =
CN_MODE_GREY_MONO、MEMSIZE = (X>>3)*Y,链路显存本就是 1 bpp。
- RDisp_Form_InitInf 的 CN_RGB_RED/GREEN/BLUE 是编译期常量,不是
逐帧数据,每次召唤都发同样的 12 B。
- RDisp_LcdColor_To_Mono() 对 CN_MODE_GREY_MONO 直接 return TRUE
不转换;RDisp_Lcd16B_To_Mono()(RGB565 转单色)挂在
CN_MODE_COLOR_16B 下,本构建永不进入,是死代码。
改动:
- 5.16.5 INIT 表 29 B -> 16 B(宽 2 + 高 2 + 显存 4 + 8 键值表),
删 1 B 颜色位与 12 B RGB,附证据块。
- 6.2 命令集 INIT 行同步,加单色口径注。
- 5.16.6 第 6 条注改为"该函数在参考单色构建下就是空转"。
- 5.16.9 第 1 行改为"补 8 B 键值表 -> 16 B、颜色 13 B 不对齐",
新增约束补单色一条,警示改为 16 B 与 29 B 不可互换。
- 5.16.10 判据第 1 条改 16 B 且不得出现颜色字段。
- 9.13 第 2 条改 16 字节且不加颜色位与 RGB,第 9 条客户端按 16 B
解析,破坏性变更警示改后 8 B。
- 2.4.1 补"多色显示不在不可移植项内"——参考同样单色。
- 8.1 色深行补无灰度无彩色,渲染行改双出口。
- 2.5.2 第 20 项、9.1.2、9.12、10.3 第 13 项同步。
版本 v1.6 -> v1.7。
|
2026-10-28 09:55:44 +08:00 |
|
wandering1
|
ec77c899e5
|
docs(产品需求): 屏板源码到手——串口通道协议定版并补状态灯下行
依据屏板固件工程 DTU-LCD(STM32F103ZE + UC1698U)重写 5.16.2 / 5.16.3,
v1.5 遗留的"四项未知"全部消解:
- 物理层:RS-485 半双工、700000 8N1、软件 DE;APB1 42 MHz 下分频
零误差(BRR=0x3C0)。
- 角色反转:屏板是 Modbus 主站(主动召唤),主机是从站 0x01。
- 帧 A(6 B 召唤):01 03 type key CRC_H CRC_L,KEY_CMD=0 /
RT_CMD=1,CRC-16/MODBUS 只覆盖前 4 B 且高字节在前。
- 帧 B(4208 B 应答):3200 显存 + 4 B 状态灯 + 4 B info + 998 B
填充 + 2 B CRC。readme 写 3208 B 与代码实参 4208 B 矛盾,以代码为准
并标注待台架复核。
- 状态灯下行:info[0..3] 为 32 位小端位掩码,ID 0 电源灯恒亮、
ID 1~19 对应 bit1~19;位到业务状态的映射参考源码没有,须自定。
- 键值:KEY_TYPE 0~10,实物仅 7 键(可达 1/2/3/4/7/8/9),且 9/10
语义与参考的 F1 / F1+ENT 冲突,需先裁定。
- 时序:275 ms 周期召唤、200 ms 应答超时、约 5000 s 屏板自复位。
同步改动:5.16 开篇、5.16.1 注、5.16.8 tTimerLCD 行、5.16.9 差异表与
新增约束、5.16.10 判据扩到 15 条、9.13 任务扩到 15 条(新增状态灯映射
与 LOGO 下发,第三批不再解冻 UART4)、5.8 两套 LED 边界、5.6 FR-UI-1
双出口、6.2 口径注、2.4.1 X3、2.5.2 第 20 项、9.1.2、9.12、10.3、12。
版本 v1.5 -> v1.6。
|
2026-10-28 09:48:23 +08:00 |
|
wandering1
|
ead8cc3a50
|
docs(产品需求): 补串口屏板通道——显示信息不只走网络
参考是"一份显存、两个出口":串口屏板通道为主(LCD_LED_Update 变化驱动 +
WriteScreenByByte 500 ms 兜底),TCP 7003 为镜像。上行同理:getRs485Key
物理键号 1~10 为主,g_tRemoteKey 为镜像,两者在 Key_Read 汇合且本地优先。
v1.4 把串口写成"随 RS-485 簇冻结",等于降级成可选,是错的。
- §5.16 标题改为「屏板链路:串口主通道 + 网络镜像」并重写开篇
- §5.16.1 重写:显存基址 0xC1F00000,三条下行 / 两条上行路径对照表
- 新增 §5.16.2 本产品串口通道:V0.1 端口盘点,默认 USART3(PB10/PB11)
- 新增 §5.16.3 屏板侧接口一览 + 列出源码推不出的四项(波特率/帧格式/
方向控制/是否分片),在拿到实测前不得声称"按参考协议实现"
- §5.16.9 差异表 10 → 14 行:新增串口通道整条缺失、双出口并发缺失等
- §5.16.10 判据 7 → 12 条:新增串口侧键号注入/500ms 出帧/并发不串帧/拔插恢复
- §9.13 任务 10 → 13 条:原 RS-485 屏板一条拆为物理层定版、下行显存、
上行按键、并发回归四条;第三批改为独立立项,不随 §5.10 冻结
- §5.16.8 / §2.5.2 / §9.1.2 / §9.12 / §10.3 / §6.2 同步
|
2026-10-28 09:36:44 +08:00 |
|
wandering1
|
463d7be135
|
docs(产品需求): 更正屏板口径并补远端屏与按键逐字节复刻规格
参考工程主机侧无任何屏/键 GPIO:KeyGet、WriteScreenByByte、
LCD_LED_Update、getRs485Key、anyNewKey 全树只有声明无实现;
按键轮询函数名为 Key_Rs485_Process,屏板插槽号 CN_SLOT_DISP=0。
即屏与键都在独立屏板板件上、靠链路传输,本产品与之同构而非替代。
- §2.4.1 X3 由「本地人机」改为「就地屏板(板件本体)」并补更正说明
- §2.5.2 补第 20 项「远端屏与按键链路」,能力计数 19 项 → 20 项
- 新增 §5.16 远端屏与按键链路(FR-HMI):两条链路对照、帧格式、
INIT 应答 29 B 逐字段偏移、续传与拒绝语义、按键状态机、三个定时器
- §5.16.7 列 10 项与参考的差异(INIT 8 B vs 29 B 为最大一条)
- §6.2 按参考源码重写:INIT 长度、KEEPLIVE 改为不应答、键码补 F1/F2
- 新增 §9.13 屏板链路复刻任务规划:10 条任务 + 三批划分 + 破坏性变更警示
- §9.1.2 / §9.12 / §10.3 同步补条目
|
2026-10-28 09:24:18 +08:00 |
|
wandering1
|
15111eaec3
|
docs(硬件): 外设引脚口径由 V0.0 更正为 V0.1
README 外设接口表与部署环境要求 3.2 节长期停留在 V0.0 引脚,
与 Inc/main.h(CubeMX 已迁 V0.1)不符。按 main.h 与 V0.1 网表
报告 §4.1 更正三处:
- TPAFE 控制组 7 线:PD3/PD4/PD7 + PF13/14/15 改为
PC6 FRSTDATA / PC7 BUSY(EXTI) / PC8 RD / PC9 CONVST /
PA8 OS2 / PA11 OS1 / PA12 OS0(原表漏 FRSTDATA 且 OS 顺序反)
- RS-485:UART5(PC12/PD2/PD0)改为 UART4(PC10/PC11/PA15),
依据 app_main.c 的 rs485_init(&g_rs485, &huart4, ...)
- LED1/LED2 驱动脚:PC4/PC5 改为 PC5/PB0(PC4 让位给 ADC17),
并补网名与丝印 LED(n+4) 倒序提示
产品需求设计文档 4.2 节随之删除该「文档遗留」标注(已闭环)。
README 补 RTC/SWD 两行,两处均加「口径 = V0.1」与权威来源。
|
2026-10-28 09:11:07 +08:00 |
|
wandering1
|
4974321f2d
|
docs(产品需求): 新增 9.4~9.12 缺口逐项明细
把 9 章从"缺口清单"补成"逐项明细":每个定值、每个点、每个模块
差在哪,以及怎么算做完。
- 定值:40 项去向对账(覆盖参考 35 + 本地 5),差额更正为 214 项;
23 单元差额表 + 已覆盖 35 项逐项对照 + 未覆盖 163 项清单
- 遥测:31 点逐点对照,缺 22 点按依赖分三批
- 开入开出:138 = 软遥信 104 + 硬件 27 + 双点 6 + 多态 1;
31 开出 = 出口 11 + 信号 20
- 动作事件:33 条(421~453)逐条对照,覆盖 9 条
- 保护元件:模块级 45 -> 8,37 个缺失模块逐个给出后果与依赖,
差额由 +35 更正为 +37
- 录波:14 项硬指标与复刻所需四件东西
- 记录体系:13 类队列容量表,覆盖 8 类
- 规约栈:12 种逐种链路与工作量特征,四层排期
- 新增 9.12 复刻完成判据(12 条可验证判据)
|
2026-10-28 09:01:10 +08:00 |
|
wandering1
|
f10869f048
|
docs(产品需求): 改为 1:1 复刻口径并补参考源码实测清单
参考工程 Scatter_P_HV03.01_SV01.01 的源码常量表是唯一需求清单,
不再引用其分析文档(实测有两处不准:元件 89 vs 实为 45、
定值约 260 vs 实为 249)。
- 2.4 范围反转为参考能力全集,只允许 5 项不可移植项落在范围外
- 2.5 重写为 1:1 复刻基线:19 项能力清单、104 八段地址表、
定值 23 单元分布、45 元件九类归集、规约全集、差异归因
- 更正 104 段基址笔误:参考 Rly_IEC104.h 为 1 起编,
遥测 0x4001、遥控 0x6001(旧文档写 4000H+ / 6000H+)
- 9 重写为复刻进度与路线图,缺口分阻塞型与规模型两表
- 5.9~5.15 补全采集链与 104 需求,6.8 点表摘要补差额说明
|
2026-10-28 08:55:21 +08:00 |
|
wandering1
|
a275539c17
|
docs(全仓): 内容页黄金 47 → 53 的当前态同步——含钩子显示名,登记簿口径另笔
task-9 让内容页黄金从 47 涨到 53(通讯设置页六态),本笔只做**当前态陈述**的同步;真值全部本轮实测:
`simulator/tests/ref/*.bin` = **53**;`git diff 31ca4a1f..HEAD` 对该目录 = **
6 个新增、零修改** ⇒ 存量 47 张
逐字节未变(这条是关键:新增页不该让旧页重生成,否则回归基线就失去意义)。
**四类命中各走各路,这是本笔的全部难点**(分类比替换重要得多):
· 当前态 → 改,25 处页数,落在 16 只文件(AGENTS、钩子显示名、导航器 docstring、`lvgl-simulator` s
kill、
门禁索引与 `ui-golden` 详解、UI 自动化流程、内容页架构、页面补齐规划与扩充方案、数据供给、自动化测
试流程、覆盖率口径、测试开发标准流程、模拟器两份 README);
· 变更记录历史行 → **一条不动**,另在其下一行插入当日「47 → 53」新行 6 条(含判据与零漂移证据);
· **同数不同义 → 不动**:覆盖率口径里的「47 个 .c」「47 = 13+5+29」、ram_report 的表行号 47、`#47-D`
诊断号、LSI 47kHz、47,360 栈字数、像素哈希 3476/3474 —— 一并替换就会毁掉六个不相干的事实;
· 带日期戳 / 自declare 冻结的快照 → 不臆改(数据供给篇那句上一笔已加「当时」,页面补齐规划里那张
「2026-10-25 复核…剩 21 叶」的表自带「完成即冻结不回改」声明)。
复扫残留当前态 47 = **0**。⚠ 顺手纠一条**会教错方法**的陈旧:naive 计数 `grep -c '#page='` 上一笔写的是
22,现在真值是 **23**(文件头示例行也算一次)——旧文档里那个 22 **恰好等于新的正确 bound 数**,不改的话,
下一个人用错算法还能碰巧对上,比错更糟。
⚠ `AGENTS.md` 里本次有两件事同行相邻(本笔的内容页 53 页 + 批次三那句 `TC-*` 停发),**分两句说明**:
前者是计数同步,后者是昨天那条「批次三不坐」裁定的入口文案,二者不是同一件事。
钩子显示名改在 `.pre-commit-config.yaml`(47 → 53)。**这条必须与代码同批入库**:配置脏而未 stage 时
pre-commit 会直接报错挡住全仓任何提交(今天已实测两次),所以本笔先落它,把后面几笔的路清开。
自查:`check_doc_links --all` rc=0(203 篇)、`check_ids --strict` rc=0 且不可判定绝对
数 **979 未变**(新增
文本里的提交号与 `#page=comm` 没推高它)、`gen_task_table --check` 0、`check_bom_drift`
0、18 只文件 noBOM /
LF / U+FFFD=0;行数变动 +49/−47 全部可归属(插 6、删 2、并 1),其余为 1:1 等行替换。登记簿销项与叶数
(`UI补齐.md` + `docs/任务规划/README.md`)**不在本笔** —— 那是口径变更不是计数同步。
|
2026-10-27 13:54:05 +08:00 |
|
wandering1
|
4c74cfa825
|
refactor(编号·批次二): 文档侧 194 处保护功能号改成功能名,定义表 7 张首格改语义标识
批次二文档半(道 gate-docs 执行)。先纠三个数的口径账,别再拿任何旧数当准:**234 处是准数** —— 卡片写
52(Lead 用了门禁 Checker 的引用集合,它**刻意排除属主文档内部的定义位**)、道里先报 265(裸正则把
`SDL2-2.32.10` 里的 `L2-2` 当成功能号,误报 10 处)。最终边界口径 = 带左边界 + 跳过反引号代码段。
· 19 只文件 HEAD 共 234 处 → 现 40 处,**40 处 100% 落在变更记录行**(冻结历史,按 Q3 一条没动),
非变更记录残留 **0**;改写 163 行 / 16 只文档。站点最多:规划文档 110→37、相量层单测说明 25→1、
采集与数据处理短板评测 21→0、App/algo/README 26→0。
(`App/algo/README.md` 由上一笔代码提交带上车,路径归属已在该笔正文注明,内容是本批改写)
· **定义表首列由编号改成语义标识**(编号规范 §3.3「表首格就是短语」的完全形态):首列原为编号的表
共 **7 张**(不是 5 张),删掉与之重复的「语义名」列;表头标签按域词区分——三张 L3 保护**元件**表
保留 `| 元件 |`,四张 L1/L2 表用 `| 功能名 |`(把「元件」统一洗成功能名会丢掉领域信息)。
七张表逐张核:表头竖线数 == 分隔行 == 首条数据行 == 列数+1;与 HEAD 逐块对拍**净新增不一致块 0**,
并且正是这个对拍抓到第一版「三张表数据行已删列、表头没删」的破表。
· 7 处删号留下的残词/重复解释括号人工收口(如「L1-5(通道标定)」→「通道标定(一次系数 + 零漂)」),
复扫待收口站点 0;措辞逐字取自映射表,无第二种说法。
· tools/arch_diagram 三只生成器 4 处(3 处 docstring + 1 处图形文案)与产物同批:重跑后**只有位图那张
变 2 个 text 节点的换行位置**,画布 1580x740 与总行数不变,另两张逐字节未变;改前先干跑对照证明三张
svg 原本与生成器一致(不在 stale 基线里)——`check_generated_fresh --only docs-svg` PASS。
本笔另含 **F-* 半批的文档面**(同一轮 `git add docs tools/arch_diagram AGENTS.md` 一并收进
,非误伤):BSD
函数调用关系里 9 处反引号紧邻指针、属主文档 §7 的停发句与导读行(**12 条定义行原样保留、不删登记族**)、
以及 `gen_net_instability_svg.py` 与它的产物 `网络不稳根因总览.svg`(「唯一读者红线」那条的框宽自适应
526 → 551,右缘 1411 未越界,画布 1560x1468 不变)——该半批的**代码注释面**在下一笔。
⚠ 因 `docs/任务规划/登记簿.md` 与 `docs/任务规划/UI补齐.md` 正被另一张卡(UI 叶数复核)改动,本笔**不含
那两只文件**,批次二的 §9 存量收尾与它们同批提交。
|
2026-10-27 09:05:24 +08:00 |
|
wandering1
|
0f7b5a87fb
|
chore(编号): 存量编号全量转语义短语,门禁识别面与语料同批重打
登记簿、文档与代码注释里的存量字母加数字编号(N-x / S-x / T-x / E-x / A-x / 卡号)
一律改写为语义短语,净删 2,028 处引用;删除基线与待确认、并行分道方案、排期详述、
采集保护收尾 4 篇(内容已并入 docs/任务规划/README 与登记簿)。
门禁机器与三张账同批重打:check_ids.py 新增变更记录行豁免与第二根护栏
undecidable_total_ceiling;check_test_traceability.py 只加 stdout/stderr UTF-8
reconfigure(TC_RE 未动);check_cubemx_survival.py 的 --write 固定 newline=LF;
id_registry / id_aliases(+19 条 retired-to-phrase)/ id_known_backlog 重打。
test/ 56 个文件同步 TC 标签语义化,其中 18 个 TU 改了 CHECK / printf 里的标签文字,
是本批唯一改变构建产物的文件集合。
为什么合成一笔、不拆四笔(实测撞闸,非偏好):pre-commit 跑钩子前会 stash 未 staged
部分,拆开后中间提交必然是「新规则 + 旧语料」——实跑可判定 85.15% < 基线 86.00%、
不可判定 1,453 > 上限 1,166,编号门禁直接拦下。编号识别面与它描述的语料只能同码移动。
实跑基线(工作区全量):754 文件 / 8,230 处编号字面量 / 可判定 7,079 = 86.01%
(基线 86.0%,容差 0.1pp)/ 不可判定绝对数 1,151(上限 1,166)/ 校验 1-6 错误级 0 /
告警 = 悬空 2(App/algo/freq.c 的 S2,属 §4.4 同号不同义)+ 孤儿 50。
基线从 84.0 抬到 86.0 的理由见 docs/门禁说明/id-check.md §7.6:本批真删了 2,028 处
引用,可判定面随真实内容上升,不是把分母做小。同批新增排除 docs/硬件平台/ 语料,使
识别面少 264 处——芯片手册位号与网表料号不属编号空间(registry 有 excluded_paths_note)。
⚠ 余量只剩 0.11pp(约 10 处)与绝对数 15 处:把「可判定的引用」改成散文会立刻撞第二
根护栏。另遗留一项:id_aliases 里 retired 的 N / S / T / A 别名没有 scope(U1~U5 有),
今后有人新写一个 A-4,校验 3 不会响,只能靠人,建议下批补 scope。
固件不变证据:115 个 .c/.h 剥注释并归一字符串后与 HEAD 逐字节全等,残留代码差异 0;
App / Src / Drivers 的字符串字面量零改动。@build 0 错误 0 警告;40/40 主机套件、2,889
断言全通过;覆盖率 line 89.2% / func 92.6%;pre-commit 48 钩子 --all-files 全绿;
check_doc_links --all 通过(176 文档,章节引用无法判定 0);逐字节卫生核过:14 个带
BOM 文件与 HEAD 一致、0 个 CR、0 个 U+FFFD,字符串字面量纯 ASCII。
.cubemx_survival_baseline.json 的 watchdog-module 哈希 56bf27 变 2bb051 属合法:
Src/freertos.c 的 USER CODE 区内只有注释文字随编号改写,代码未变。
同批带上体积同码凭证与 RAM 台账行(@build 之后盖戳):RW_IRAM1 79,008 B / 60.3%,
RW_CCM 57,376 B / 87.9%,阈值 92%。
|
2026-10-26 12:28:14 +08:00 |
|
wandering1
|
15aa08552c
|
docs(问题记录): 删除项目审查与优化建议报告,结论并入模块文档与编号规范
用户裁定:该报告大部分内容已闭环,可删除;仍有价值的迁到合适文档。删前逐条核对,
确认绝大多数结论在仓内早已有权威副本(LV_DRAW_SW_COMPLEX / osFlagsNoClear / SPI 分频 8
/ 分层反向依赖存量基线等),只迁真正独有的四类内容:
1. 暂缓理由与重开条件(三条量化门槛)→ RAM 使用分析与优化方案 §4,并明确「本节是唯一
权威」,其它文档只留指针;同时把 10 处指向报告 §5.3 的重开条件引用改指该节。
2. 2026-10-22「常驻 vs 动态」三项诊断(静态前五块 43,462 B = 58%;动态面只有 heap_4,
故栈余量=CCM 余量;栈深主因是日志/配置写链)→ 同文档 §2.5。
3. `_fp_digits` 1,018 B 删不掉的机理与 F-6 根因修法(Q10 宏改单精度,−332 B,4.49e6 例
逐位等价)→ §2.6.4。
4. 「UI 侧缓冲进 CCM」要按 DMA 可达性二分(LVGL 池可进,帧缓冲/推流缓冲不可)→ 暂缓清单。
编号侧(报告曾是 6 个族的属主登记处):
- 原报告 §9 的 26 行「号 → 现在详述于」对照表迁到 docs/编号规范.md 新增 §4.5,6 族
owner_docs 改指该节。规范正文含大量写法示例,直接当定义集会误伤,故 check_ids.py
新增 `_def_owners`:snapshot_only 族剔除规范正文,只恢复可判定、不参与悬空/撞号/裸形
/紧邻判定(实测若不分,裸形 S1 误报 238 条、S-3 与登记簿 S-3 误判重复定义)。
- 11 个已死号(N-03b/N-10~N-13/N-20/N-21/N-24/N-26/S-1/S-2)在 id_aliases.json 登记
status=void 并写明去处——它们被约 110 处代码注释与文档引用,原先只靠「报告里顺带提过
一句」才算有定义,报告一删就集体悬空。N-21/S-1/S-2 一号两义,注记已分别标明。
- 顺带修 id_aliases.json 的 note 被脚本累积重复 26 次;修 registry 里 3 处仍指向改名前的
任务卡文件名(W1-采集保护收尾.md / W8-数据可信.md),以及 iec104_master.py 两处同类注释。
门禁:check_ids --strict 通过(可判定 8747/10410 = 84.02%,基线由 82.6% 抬到 84.0%);
check_doc_links --all --sections-strict 通过(177 文档);pre-commit 相关钩子全过。
|
2026-10-25 02:08:58 +08:00 |
|
wandering1
|
1e6996ecd0
|
docs(任务规划): 波次号 W1~W8 改为语义名,两个任务卡文件改名
用户裁定:W4 这类字母+数字让人难以理解。W 号看着像执行顺序,实际 W8 排在
W3/W4 之前,读者必须先查表才知道谁先谁后;去掉编号后执行顺序就是 §2.0 表
从上到下,少一层映射。
- 波次改语义名:采集保护收尾 / 数据可信 / 预算与内存 / 结构债 / 验证常态 /
UI 扩展 / 仓库决策
- 文件改名(git mv):W1-采集保护收尾.md → 采集保护收尾.md,
W8-数据可信.md → 数据可信.md
- 删掉只为编号存在而写的两条注记(W2/W3 槽位保留、W3 不重编号)
- 并行分道方案的分支 ID 同步:task/W8-scale-doc → task/cal-scale-doc 等
- 编号登记表:WAVE 族标为废止并关闭悬空检查(属主文档已不再定义 W 号),
C-WAVE / D-WAVE 两族 title 补废止说明
- 同步 15 处跨文档引用(README 文件夹地图、产品需求 §9.2、编号规范 §4.1、
报告 §0.3 波次表、RAM 台账、保护规划变更记录等)
- 不动的同形异义:网表 W4.0 封装宽度、芯片手册 W1 载带尺寸、MSVC /W4
|
2026-10-25 01:44:25 +08:00 |
|
wandering1
|
67fbdd9897
|
refactor(结构债): S-4 删零消费点占位宏;S-2 消两处与 Inc 重复的 extern
用户批准「先只跑 1+2」(报告 §0.4 结构债三项 S-1/S-2/S-4 的评估结论)。
**S-4 闭环**:删除 `App/app/app_cfg.h` 里 4 个**全库零消费点**的宏
(`APP_NET_ENABLE` / `APP_ADC_ENABLE` / `APP_RS485_ENABLE` /
`APP_SYS_TIME_SRC`),文件降格为「决策占位说明」——修改记录 v1.2 写明为什么删、
将来在真实初始化点接入门控时怎么接回;同时去掉 `app_main.c` 里只为它存在的
include。留「看着能裁剪、其实不生效」的宏比不留更糟:它不产生任何编译期效果,
却会让评审误信模块可裁剪——此前为了对冲这个误解,AGENTS 之外还得在 6 处文档各
写一句「未接线占位,别当开关用」。
**文档口径同步 17 处**:`App/app/README.md`、`App/README.md`、根 `README.md`、
`项目架构总览.md`、`项目部署环境要求.md`(§3.2 两行 + 配置表一行)、`产品需求
设计文档.md`(B0 结论 + 配置表)、`基线与待确认.md`、`排期详述.md` C5、`登记簿
.md` N-23 残余、`RAM使用分析与优化方案.md` 三处。
**顺带纠出另一个「文档里有、代码里从来没有」的东西**:`RAM使用分析与优化方案
.md` 把 `APP_CCM_ENABLE` 写成「加在 `App/app/app_cfg.h`」,全库只有那篇文档提
到它,从未落地——已就地标注「未实现,重开本簇时一起落地」,免得下一个读者以为
CCM 有回退开关。
**S-2 第一步**:删 `gd5f2gq5ue.c:47`、`sd2506.c:20` 两处与 `Inc/spi.h` /
`Inc/i2c.h` 重复的 `extern`;GD5F 改 `#include "spi.h"`(沿用 `ch395f.c:22`
的既有做法)。
**镜像体积逐项不变**:`Code=213,188 RO-data=18,580 RW-data=1,184
ZI-data=131,504` 与改动前完全相同,`@build` 0 错 0 警告 → 两步均为行为中性。
报告 §0.4/§9 同步为实测口径并**认错**:S-2 不是旧写的「4 处」而是 **25 处**
(`App/task/default_task.c:52-69` 一次就 18 行任务句柄/属性 extern;
`stm32f4xx_it.c` 的 `fault_entry_hard` 属 ARMCC `__asm` 合法例外,不该「
修」);S-1 不是「语义层错位」而是**真实的 BSP→App 反向依赖**(NETCFG 10 处
include `App/cfg/cfg_file.h` + UI 3 个文件)。这两个旧数字是 v3.0 重写时沿用
未测所致。
途中被自家门禁正确拦下一次:在 .c 注释里写「S-2a」→ `+1 [校验1] 未登记编号
`,改成平实语言后转绿(正合既有纪律「代码注释禁用不可检索的内部编号」)。
门禁:`@build` 0/0;`check_ids.py --strict` 增量拦截通过、存量债 650 → 640、
可判定比例 82.83%(地板 82.6%+0.1pp);`check_doc_links.py --all
--sections-strict` 146 文档 0 问题;`pre-commit` 相关文件全 Passed;字节卫生 15
个文件 BOM/CR/U+FFFD/行尾空格全清(`end-of-file-fixer` 修掉 app_cfg.h 的一个
多余空行)。未推送。
|
2026-10-22 18:22:58 +08:00 |
|
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 |
|
wandering1
|
506eccc68f
|
docs: 错误码传播审计收口并删除该文档(E-xx 转历史编号族)
本次会话先后销项与关闭:
- E-61 SD2506 清 INTAF:原实现只读取 CTR1,而按手册 ARST=0 时读操作
不清标志,属空操作;改为读-改-写 CTR1,并按手册订正 CTR1 位宏
(INTAF/INTDF/BLF 位置,ARST 归 CTR3)
- E-16 cfg_file:新增 CFG_FILE_MAX_NAME_LEN(段名/键名 ≤15),注册时
拒绝超长键名;s_gen_document 两处 snprintf 改检查式;补 TC-CFG-024
用例(主机单测 149→151 PASSED)
- E-23 TC704:PHASE7_MULTI_COUNT 8→5(并发上限 = 8 − 3 个常驻监听),
accept 失败分支加网络代次检查(网络重建即重建监听)
- E-26(UDP)按“保留 API + 文档定案”关闭;E-30 评估为不必要后关闭;
N-4(ACCEPT 决定不实施)关闭
审计文档剩余 5 项 P2 + 2 项监督,经用户裁定“都不重要”后整体删除:
- 删除 docs/问题记录/错误码传播审计.md(634 行)
- 九类缺陷模式表迁入 docs/编号规范.md §4.2.1(PAT-01~09)
- E-xx 转为纯历史编号族:编号规范 §4.1 属主改“无(原属主已删除)”,
§4.3 保持冻结;全仓 26 处引用按“保留编号、去悬空文档名”处理
- 顺带修正 N-4 收口遗留:排期详述 C1 才是 E-25/E-27/E-28 的承载处
(审计 §4 曾误写为登记簿);README 两处 C1 旧名改回“net 层跨上下文收口”
一并提交此前遗留的体系层评审报告 2026-10-14 复核 WIP(六维评分复核、
未闭环 Top 5→3、三区水位实测刷新)。
校验:Keil 构建 0 错误 0 警告(Code=212344);check_doc_links
--sections-strict 与 --all(142 文档)通过;内存双台账刷新后均 PASS。
|
2026-10-15 07:39:38 +08:00 |
|
wandering1
|
d3107f374f
|
docs: 待处理内容.md 解耦为 docs/任务规划/ 文件夹(README 排序权威 + 6 个职责单一文件)
- rename_ref.py 搬迁:git mv + 全库引用改写 33 文件 82 处
- README.md 保留 §0 编号空间 / §1 未闭环一览 / §2 推进顺序权威 / §3 维护约定
- 拆出 6 文件:W1-采集保护收尾(任务卡五字段)、排期详述、暂缓-RS485、
登记簿、测试与架构专项、基线与待确认
- 外部引用重定位 ~50 处:裸「登记簿 §X」、§5.1→基线与待确认 §2.1、
§2.4→暂缓-RS485、§6→基线与待确认 §3、脚本注释 T-x/N-x→登记簿
- 新增并行写纪律:任务分支不改本文件夹,状态列由 Lead 主工作树更新
- 验证:doc-links 141 文档全绿;mem-numbers 一致;refgraph 重生成;
@build 0 错误 0 警告;新文件无 BOM / LF / 零乱码
|
2026-10-12 13:42:47 +08:00 |
|
wandering1
|
90db528032
|
W1 功能主线完成:内存台账三件套(W1-0) + IEC104 上行(B4) + protectTask 板端接线(B5)
W1-0 台账三件套:scripts/ram_baseline.py(四模式)+ ram_baseline.tsv 趋势 +
docs/内存管理/RAM预算台账.md + pre-commit mem-budget 钩子(RW_IRAM1/RW_CCM >92%
即 FAIL + Top-10 附表);审查报告 §5.5 三条闭环。
B4 IEC 60870-5-104 上行(被控站,TCP 2404):App/protocol/iec104/ 三模块
(asdu 编解码 / pts 点表+数据源 vtable / link APCI+FSM,纯逻辑零 I/O)+
App/task/iec104_serv.c(iec104Task,NET_READY 屏障 100ms 分片喂位)。
82 断言 L0.5 全绿 + iec104-unit-test 钩子(第 31 钩子);
设计说明 docs/子系统设计/IEC104上行设计说明.md 全量回填。
B5 protectTask(L3 板端接线):App/task/protect_task.c——20ms 判据节拍
prot_elm_run + L5-4 采样故障闭锁(adc_health 电平位→元件复位)+ L5-1 定值
校验和巡检;新增 prot_elm_request_reset() 收口跨上下文复归(104 YK11 落请求、
eval 头部消费);定值/元件初始化移入 app_main_init(内核前)。TC-PE-010
(prot_elm 28 用例)。
门禁与内存:TASK_WD_PROTECT=8 入 required_mask(产品 0x77→0x1F7、HW 层
0x1F5,看门狗单测 39 断言同步);FreeRTOS 堆 48→56KB(.ioc L1 参数 +
FreeRTOSConfig.h 同步,RAM预算台账 §6 登记配额 48→56KB)。
ZI 144,008→152,204(+8,196 B = 堆 +8KB,B5 扩容);Code=204,348。
stack_report:protectTask 512 words 静态链 872 B/余 57%、iec104Task
640 words 1456 B/余 43% 均 PASS;RW_IRAM1 73.1% / RW_CCM 87.9%(<92%)。
验证:@build 0 错 0 警;ci_local 全绿(31 钩子 + 13 主机侧单测);
doc-links 135 文档 PASS。登记簿 B4/B5 销项、W1 波次完成;保护规划/看门狗
说明/AGENTS(9 任务)/RAM 三文档全部同步。
遗留(验收窗口,非代码空洞):台架第三方 104 主站往返(送检窗口)、
标准源注入动作判据、@test PROT 锚点 + protect 栈水位 + 新堆 min_ever 复测。
|
2026-10-12 12:36:23 +08:00 |
|
wandering1
|
d758d5cd7b
|
docs+net: FUN_PARA 定案 0x08——bit0 保留位证伪,Trap18 定案更正 + N-31
CH395F FUN_PARA 的 bit0 之争定案:取 0x08(bit3 SOCKET_CLOSE=1,bit0=0)。
证据(一手,按强度):
- 官方手册 V2.2/V2.3 与旧版 V1C/V1E/2020 版 §5.52 位表:bit0 一律
「保留,必须为0」,任何版本都不存在「bit0=多 Socket」这一行。
- 官方 SDK CH395INC.H:349-353 位宏只有 bit1/3/4/7/8,无 bit0 宏。
- 官方例程直接反例:EXAM5_TCP_Server 传 0x02(bit0=0)却给 Socket 0~7
全部配缓冲;EXAM11_FTPClient 直接传 0x08;全 EVT 包无一处 0x09。
- 手册命令章前言:8 Socket 是芯片原生能力,靠 _SN 索引寻址;§5.45
真正的门槛是缓冲分配(Socket 个数 >4 须重分配缓冲)。
- 概念讹传源是 bit1 FUN_PARA_FLAG_TCP_SERVER(服务器多连接,§9.2.6)。
- 互联网检索无任何出处称 bit0 为单/多 Socket 模式。
Trap 18 的「bit0 决定 Socket 数量」是推论而非实测:无日志、无 TC 号,
且当年 Socket 1~7 未显式配缓冲(Trap 01/02 混淆因子未排除);TC704
40/40 与结论出自同一提交,属自证,不构成 0x08 的对照。
改动:
- net_socket.c:0x09→0x08(原为未提交改动,现已过编译门禁)+ 版本留痕
- ch395f_reuse_bench.c:0x09→0x08,与生产 net_init 同构
- net_test_task.c:TC704 注释纠正(Socket 可用性不依赖 FUN_PARA)
- Trap 18 新增「定案更正」完整证据链;Trap 25 疑点改判为定案
- Test_Guide / 产品需求 / 架构总览 / BSD 调用关系:0x09→0x08 改口径
- 待处理内容.md 登记 N-31:0x08 下多 Socket 台架复测(TC704 降并发
≤5 + FTP 回归),补 Trap 25 销项时漏登记的尾巴
验证:@build 0 错误 0 警告;check_doc_links --all 通过;无 U+FFFD。
|
2026-10-11 20:05:22 +08:00 |
|