wandering1
|
728d60675f
|
feat(UI/采集/104): 通讯设置页 + 开机账本 + adc_cal 可诊断化——三车道同树一次构建入库
三条道在同一棵树上交付,故合并成**一次权威构建**(@build 0 错 0 警,Code=235236 RO=26308 RW=1572
ZI=136924)后同笔入库;台账已按该构建回填(`ram_baseline.py --update` + `--write`、`chec
k_mem_numbers.py
--write`),凭证与实际 .map 同源。归属如下:
· **通讯设置页**(道G task-9):新增 `Drivers/BSP/UI/ui_page_comm.{c,h}`(通道六注入,与死
区页同骨架同纪
律),`#page=comm` 绑定使 bound **21 → 22**、内容页黄金 **47 → 53**(旧 47 页字节零变化,
新增六态含
WAIT/OK 两张);`iec104_comm` 脏位 + store_save(**无事件位**)挂 defaultTask 同点位
轮询;`port_104` 由
宏改走 getter、`IEC104_SERV_PORT` 删除;字体 +听/监(185 字全覆)。**实机链已闭环**:FTP 外改
[comm]
的 ca/port → 复位 → 串口出现 `section 'comm' (2 keys)` 与 `i104: listening o
n 9004` → 还原 2404,全程无
FAIL ⇒「重启即生效 + 端口真值」不是推断是实测。上限核对 6/8 段、2/16 键,超限现象由 TC-CONFIG-056/057
钉死(注册 -1 + `comm init: FAIL` 锚 + getter 回 ROM),**不抬宏**。
· **开机账本**(道F task-12):新增 `App/util/boot_stats.{c,h}`——上电次数落 SD2506 用户
SRAM(magic +
小端计数 + 版本 + 异或校验),一次上电 = 1 读 + ≤1 写,**零 NAND、零卷锁、零配置段**;四态互斥
UNKNOWN / FRESH / CONTINUED / RESTARTED(BLF=1 才算电池域掉过电),**读失败绝不回写**;
文案口径「自 RTC
电池周期起」,**禁写终身次数**。复位原因优先级链从 `app_main.c` 的 if-else 收进一份真源(串口与屏幕同
源);104 四个只增不清计数 + `iec104_serv_get_stats()` 留在 serv、未塞进 link(会被 open
/close 洗掉)。
运行时长按用户裁定 = **只报本次开机以来**,零新增代码。新套件 `test/host/boot_stats` 21/21,五处注入
**全部有牙**(含「漂一字节被校验和挡下而不是报 256 倍错账」)。
· **adc_cal 可诊断化**(道E task-43):三个 volatile 计数 + `adc_cal_get_stats()`
/ `adc_cal_note_persisted()`
(水位**盖写非自增**,因为一次 save 覆盖整档,数 save 会留假未落盘);「差额 × 脏位」三态语义唯一落在
`adc_cal.h`,其中「差额 > 0 且脏位恒 0」= 绕过语义 setter 的静默丢失;TC-ADCCAL-019~023。
三条**必须留档的自纠**(都是执行道自己报的,我不替他们润色):
① stdint 那条断链是**宿主套件抓到、通讯道先修**,采集道承认自己是重复添加者并删掉自己那份;
② 「exit 2 不是证据,断言变红才是」——采集道第一版反证注入了未声明标识符导致编译错,差点当成功;
③ 套件汇总行原写 `s_total/s_total`,失败时会打印「21/21 PASSED (failed=1)」这种自相矛盾的行,已改。
另修:`check_registration.py` 的 `SIM_EXEMPT` 加一行豁免 `App/util/boot_stats.c
`(依赖 I2C 与 RCC 位掩码,
MCU 专属;核过 `sys_clock.c`/`sha256.c` 同形态先例),注册反向校验 exit 1 → 0。发号 TC-IEC1
04-034、
TC-UIDATA-029 已实抬游标(`TC-IEC104-033→034`、`TC-UIDATA-026→029`)。
门禁:id-check --strict 与 plain 均 rc=0、doc-links --all rc=0、注册校验 0、cppche
ck / coding-standard /
bom-drift 0;iec104 179/179、ui_data 295/295、boot_stats 21/21、adc_cal 11
7/117、run_par 67/67;菜单 8 状态
池 5368 不变、内容页 53/53。**已知遗留**:内容页数 47 → 53 的全仓文本同步尚未做(另卡跟踪),本笔只保
证代码与黄金一致;面板注键真机那一腿缺 CLI,交台架道补。
|
2026-10-27 11:29:23 +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
|
50e5877882
|
docs(任务规划): 只留待办——删除已完成条目与变更记录
「只保留待办」此前只落了一半:UI补齐 / 排期详述 / 测试专项已瘦身,并行分道
方案与数据可信还留着批 1/批 2 的收口说明、销项括注与里程碑达成记录。本次按
README.md §3 清干净。
并行分道方案.md(353→238 行):
- 删「批 1/批 2/批 2.5 全部收口」块、道A~道D 表行、11 张已销项数据可信卡
- 删 L1-5 通道标定 / L5-2 码值越界两条已落项、§5 批 1 三道详解(5.1~5.5)
- 删 §6.1 冲突矩阵;章节重编号 9→8,并修 §9→§8 自引用
- §4.3 删「ui_data 为什么当初排批 2」历史插叙
数据可信.md(384→290 行):
- 删 §1「为什么是这一波」、§2.2 量纲错配、§2.4 点表现状、§2.5 引擎约束
- §5 任务卡表只剩 0 / 0b / 12;§3 里程碑只剩 M4 未收口行,M5/M6 压成一行口径
- §6 顺序图只留剩余三张;§8 删两张已销风险行;§4.4 落地注改为现状口径
- §2.1/§2.3/§2.6/§4.1~§4.5/§7/§8/§9/§10 与卡 0/0b/12 全部保留:它们是
adc_cal.* / meas.* / cfg_file.* / protect_task.c / ui_data* 头注释引用的
口径出处,不是"已完成记录"
- §2 编号不连续是刻意的(被代码引用故不重排),已在节首加注说明
README.md / docs/README.md:
- 文件地图去掉「卡 1~11 已销项」「八条道」等历史表述
- §1 网络行删掉三处 merge 号与批 1/批 2 销项经过
- 道A~道H 改为道E~道H,与并行分道方案一致
排期详述.md / 采集保护收尾.md / 登记簿.md / UI补齐.md:
- 删 N-2/N-17/N-22 销项注、M1/M2 已达成括注、批 1/批 2 道名
- 修 E-27/28「批 3」与「批 4」自相矛盾;B10 硬依赖改指卡 12
未动:测试与架构专项.md——S12 / A-5 / P1-10 三节分别是 net_socket.c、
check_size_gate.py、ch395f_test.h 与门禁说明引用的锚点,删了会断校验 6。
门禁:check_ids --strict 通过(可判定 84.73%,基线 84.0%);
check_doc_links --all --sections-strict 通过(180 文档 / 2691 处章节引用)。
|
2026-10-25 22:47:54 +08:00 |
|
wandering1
|
68cbf8ea75
|
docs(任务规划): 按现状重排波次——UI 补齐转为当前波次,数据可信转收口态
用户要求按现状重新规划。盘点后现状与文档已有实质偏差,本次一并纠正。
一、盘点结论(2026-10-25)
- 批 1 / 批 2 / 批 2.5 全部收口,工作树清零、两锁空闲。
- 数据可信:软件侧 100%(卡 1~11 全销项;M4 ②③④⑥、M5 ①②③、M6 全达成),
只剩卡 0(万用表)/ 0b(子板变比)/ 12(标准源)三张台架与外部卡。
- UI:33 叶已绑 12、剩 21。原口径「余批 5 = 整定 4 页」按页面批次统计,
漏了批 1 剩的 3 页(时钟/复归/清除记录)与批 3 的 12 页,实际差 17 叶。
- 结构债:剩 net 收口、白名单、性能簇、dhara、卷锁、USART1 六项。
- 工具链 S12 / A-5 / P1-10 / S1-c 全销项。
二、关键发现:保护整条链现在是闭锁态
protect_task.c:98 要求 UA/UN/IA 的 ADC_CAL_F_VALID 全置位才走判据,而 VALID 只在
两点标定写入 [adc_cal] valid 后才置位(adc_cal.c:338)。产品构建(非 DTU_BENCH)
下保护不动作——这是卡 5 的有意设计,但意味着核心功能当前关闭,解锁只有
卡 0 -> 0b -> 12 一条路。已写进 README §1.1、数据可信 §3、采集保护收尾、AGENTS.md。
三、三条用户判断(2026-10-25)
1. 台架不在手边 -> 卡 0 顺延,本波整体不占编码道。
2. 保护保持未标定闭锁到标准源到位,不用万用表标定走捷径。
3. 下一波只做 UI 补齐,结构债押后。
四、新波次顺序(README §2.0)
采集保护收尾 -> 数据可信(收口态)-> UI 补齐(当前)-> 结构债(押后)->
预算与内存(暂缓)-> 验证常态 -> 仓库决策 -> 暂缓 -> 硬件改版。
排序原则补一条元规则:优先级只在「能开工」的项之间比较——高优先级波次全被
外部资源或硬件代次卡住时,按「现在能整波闭环」重排,阻塞原因写进「为什么在这」列。
五、新增 UI补齐.md(当前波次任务卡)
21 叶按数据源就绪度分三梯队:第一梯队 9 叶零依赖(整定 4 + 维护 3 + 遥测 2)、
第二梯队 4 叶需新配置段(通讯设置 + 遥信 3,后者无开入硬件不立卡)、
第三梯队 6 叶需写入方或计数器(记录 5 + 运行报告);不排 2 叶(手动录波 / SNTP)。
共 7 张任务卡,单道串行——ui_menu_tree.txt 与 ui_page_registry.c 是单写者生成物。
六、顺带清掉的文档漂移
- 排期详述 §1/§2 还挂着 3 条已销项条目(日志管线 N-2、写回 flush N-22、
探针心跳 N-17),与 README §2 自相矛盾 -> 删除并补销项说明。
- 测试与架构专项:§1 P1-10 与 §2.1 S12、§2.3 A-5 已销项却仍留详述 -> 压缩成证据指针。
- README §1「网络 4」只列 3 条(漏 N-30)-> 补齐。
- docs/README 文件夹地图与登记簿卷首仍称「数据可信 = 当前波次」-> 改指 UI补齐.md。
- 页面补齐规划的就绪度表:遥测死区/系数随卡 10/卡 2 已具备数据层、SOE 页已落地,
三行状态更正;统计口径改为「27 叶中 6 叶已落地,剩 21 叶」。
七、踩到的坑(写进日志备查)
测试与架构专项卷首那段「已完成事项的证据沉淀」清单是 S4/S5/S7/S9/S11 的**定义出处**,
压缩时一并删掉会让校验 2 在 6 个文件上爆 14 类新账(实机测试实施指南 S4x7/S5x5、
check_test_traceability.py S4x5 等)。清单已原样恢复——它看着像历史,实际是门禁的锚点。
八、门禁
check_ids --strict 通过(可判定 9306/11003 = 84.58%,基线 84.0%);
check_doc_links --all --sections-strict 通过(180 文档 / 2684 处章节引用)。
|
2026-10-25 22:07:29 +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
|
7048e9cb9a
|
docs(任务规划): 瘦身为只留待办,波次条目改用语义名
任务规划目录只保留将来要做的事:删掉已完成的证据链与已作废的历史快照,
并把波内条目的 C/D 短码全部换成语义名。
为什么删 C/D 短码:它们同字母不同义——C 组在 UI_界面制作流程.md 里是
UI 设计约束(屏幕/字符集/文本/编码),D 组在控制台单写者日志设计说明.md
与配置文件设计说明.md 里是决策记录。同一串短码在三处指三件事,读的人
只能猜,所以条目一律改用一行短语作标识。
- 排期详述.md 重写为「结构债与验证常态」,条目全语义名,出处列留冻结号
- README.md 删修订记录块(本文件自述不留变更记录),波次行改语义描述
- W1-采集保护收尾.md 67→30 行,只留 M3 送检与 B10 卡
- 基线与待确认.md 73→15 行,删已作废的旧栈表与旧余量数字
- 登记簿.md 逐行收缩到未闭环残余,N-29 的 .git 订正为实测 233 MB
- 测试与架构专项.md 删 S1-c(106 例已落地,且被覆盖率总闸覆盖)
- 并行分道方案.md 删批 0,修两处会返回 rc=3 的 new 命令形态
- 覆盖率口径:套件 16→33、未挂钩子 12→17、墙钟 25s→67s(实测)
- 同步 10 处跨文档引用,指向合并或删除后的新位置
|
2026-10-25 01:35:21 +08:00 |
|
wandering1
|
2bfa09ed15
|
feat(门禁): 主机单测覆盖率脚本与口径落地(销报告 §4.8 空白 ①)
落地物:
- scripts/check_test_coverage.py:发现规则与 L0.5 同一条(test/host/**/
run_unit_test.py),直接 import 各运行器复用其 TestBuild 与
unit_test_harness._BASE_FLAGS —— 配置零复制,不会漂出第二套口径;
只算自研生产源码(App/**、Drivers/BSP/**)的行/函数、多套取并集、
生成物(文件头写"自动生成/请勿手改")不进分母、分母一律来自插桩
报告不猜行数;中间物全在 %TEMP%,不新增 .gitignore 规则。
- scripts/test_coverage_baseline.json:增量拦截台账(只拦回退不拦进步,
与 layer-deps / bsp-err 同姿态);ci_local.py 加 opt-in --coverage。
- docs/测试说明/主机单测覆盖率口径.md:口径 + 工具链实测 + 九条盲区。
- 报告 §0.1 / §0.4 / §4.8 / §5.5 / §7 改写 + 变更记录 + 去处表。
工具链是实测出来的(换机必读):Windows 原生侧无任何 gcc/gcov(全盘扫
Program Files*、msys64、scoop、choco、.platformio、LocalAppData = 0 处);
MSVC 14.51 已砍 /coverage,且只报 D9002 后照常编译成功 = 静默假数据;
CodeCoverage.exe 17.0 三个子命令只打印用法。最终用 mscoverage 18.x
(Microsoft.CodeCoverage.Console.exe)collect -f cobertura 做加载期动态
插桩,并实测它透传子进程退出码 → "插桩运行下仍必须 PASS"可当硬条件。
首登数字:16/16 套插桩下全绿,并集 line=2552/2893(88.2%)、
func=193/207(93.2%)、19 个文件在测、**未触及 125 个生产源文件 /
约 11,839 行**——最后一栏才是这套口径真正照出来的东西。
门禁自证:人为抬高基线后 行/函数/总计 三条回退路径都报 REGRESS 且
退出码 1;--module 子集跑不再假报总计回退(首版会,已修:并集口径下
子集必然变小,全部回退判定只在全量跑时生效)。
GCC 追问的复测结论(口径文档 §2.1 决策记录):本机 WSL2 Ubuntu 确实有
gcc/gcov 15.2.0,16 套单测在 gcc 下全部编过、用例数与 MSVC 逐个一致,
gcov -b -c 也确实给出分支覆盖(nand_ftl.c 分支至少走过一次 41.40%);
但换编译器=换分母(sha256.c gcc 105 行 vs MSVC 114 行;adc_input.c 101
vs 120)。**用户裁定:本仓只留 MSVC 一条覆盖率通道**,不建第二条——
多一套工具链就多一套分母、多一本台账、多一个"这台机器到底有没有 WSL/
gcov"的未决项,换来的只有分支这一维。分支覆盖因此**记为已接受缺口**
(不是待办):绿灯只证明行与函数被测到,补偿判据 = TC 双向追溯 +
用例显式列边界值;§8 写明重开该裁定的前提是先答"两份分母怎么对齐"。
刻意未挂 pre-commit:16 个单测钩子已经跑过同一批测试;依赖 VS 可选
组件(缺组件时 skip 会静默失效、FAIL 会拦换机);待一个真实回退事件。
YAML 片段与理由写在口径文档 §8。
自查:pre-commit run --files(6 个改动文件)全 Passed;check_doc_links
--all 回到存量 35 处(本分支贡献 0);check_ids.py --strict PASS;
check_mojibake + BOM/CR/U+FFFD/行尾卫生逐项自查全净。本轮零 .c/.h 改动
(纯 .py/.json/.md),故未跑 @build、未占 build/bench 锁。
|
2026-10-23 23:44:45 +08:00 |
|
wandering1
|
49a257b34c
|
docs(任务规划): 立项 W8 数据可信,补 ADC 注入验证两卡,新增并行分道方案
- W8 数据可信:通道标定 → 遥测链 → 运行参数,14 张任务卡。
- 补卡:核查确认 ADC 从未采过已知电压(只验过通路活),新增
"已知电压注入验证"(只需万用表)与"端子变比确认"两卡;M4 的承诺
边界改为"ADC 引脚电压",二次值降为依赖变比的条件项。
- 撤销"1k+1k 即 2:1 分压"的换算用法:该网络被定性为源阻抗匹配,
且端子→引脚变比仓库内无文档。
- 并行分道方案:全部待办归入 8 条道 / 8 个写域,给批次与合并次序。
|
2026-10-23 23:37:10 +08:00 |
|
wandering1
|
6822726b2c
|
docs(门禁说明): 手册 §2 收敛为通用机制与查号表,逐项详解归一到 23 篇
用户一句"现在门禁都在干什么,我一概不知"引出的收尾。原手册 §2 有 27 个逐钩子小节,只回答
"拦了什么、怎么配",回答不了"什么时候会骗我";docs/门禁说明/ 已把逐项详解(含"限制与盲区"
一节)建好,本笔做收敛:同一事实只留一处(docs/文档规范.md 的要求)。
**先搬后删**(否则收敛等于丢事实):旧 §2 里独有条目逐篇折回,共 18 处插入、15 篇受益。折回的
东西包括:六套主机单测的来历与用例规模(13/36/82/46/32/149 断言,含 nand-port 的"与旧算法
对照")与"改动公共骨架 unit_test_harness.py 会同时触发 16 个钩子";UI 页面**两层注册**(构建
注册 vs 框架注册:枚举 + s_defs[] 描述符表)与"豁免不整目录一刀切";lv-conf-sync 首次落地清掉
26 个 LVGL 9.3 不存在的选项、3 处重复定义、10 项隐式开关显式化,以及 ALLOW_DIFF 端专属白名单
与必须穿过 lv_conf_internal.h 里那层 KCONFIG 包裹;cubemx-survival 的 16 项清单、断言前先剥
C 注释(本仓注释刻意引用历史代码,不剥就恒定误报)、旧手册"自造标记区"建议与看门狗文档实测
教训之间的优先级;id-check 顺带收编 check_test_traceability.py、裸形同字母多义属**显式承认的
盲区**、--update-baseline 只许涨;layer-deps 的注入自证与报错时三条修法(注入回调 / 上层递数据
/ 才谈 ALLOW);coding-standard **nand_ftl.* 也在排除清单**(我先前那篇漏了);test-suite-switch
的剥注释判定与派生宏白名单;mem-budget 两类软提醒不拦、退出码 2 是解析失败不是通过;doc-links
的排除目录与状态词 ±40 字符距离;task-table 改栈三步;gitlint 报错样例;no-mojibake 的修复路径。
**顺带抓到旧文档两处错**(记进文档,不悄悄改):一是 check-added-large-files 的阈值旧手册写
"单个文件 > 1MB",按本机安装的钩子源码实测是 --maxkb 默认 **500**(500 KB)——已更正,并把
"本目录任何默认值都以实测或安装的钩子源码为准"写进 end-of-file-fixer 当反面教材;二是
**ui-golden 在旧手册里连小节都没有**,只活在配置注释里:除了"有基线不等于有门禁",这是另一种
失踪——有钩子、没文档。
手册 §2 改写为三节:迁移说明 / **旧编号 → 新文档 查号表**(历史引用靠它读,旧号按"冻结历史不
回改"保留)/ **跨钩子通用机制**:两阶段与换机必须重装 hooks 才带 commit-msg、stash 陷阱、
always: true 已废、改写型与只读型豁免不对称、增量拦截三段式且刻意没有 --write、没有 .map 是
"跳过"不是"通过"、改配置的验收是看目标钩子出现在输出里且不是 Skipped、新增门禁三步必须做
注入自证且"限制与盲区"不许留空,另有快速自查入口。手册 707 行 → 273 行。
引用**按内容**重指(只核编号存在与否不够,同号小节会被当本文自引用静默放过):编号规范、
scripts/README(顺带更正那里过时的 warn-only 说法,早已关闸为增量拦截)、RAM 使用分析与优化
方案、测试开发标准流程、lvgl-simulator skill、AGENTS 文档表(拆成"每门禁一篇详解"与"通用
机制"两行)、.pre-commit-config.yaml 头注释、docs/README.md 描述、手册自身 §5.5 与 §6 的两处
内部引用。另:表格里的裸节号会被 doc-links 判成本文自引用,查号表统一写成不带 § 的形态。
写说明过程又被自家门禁拦一次:gitlint 篇里引用报错样例时写了两个规则号字面量,被判形态不合规
→ 改成中文描述,没有往台账里塞 reason 解决。
验证:纯文档与注释改动,不动代码,Program Size 不变,故不跑 @build/@test;
check_doc_links --all --sections-strict **171 篇 0 问题**;id-check 增量拦截通过;
pre-commit run **RC=0 / 13 项 Passed**;28 个改动文件字节卫生 **0 异常**(无 BOM、无 CR、
无 U+FFFD、均 LF、无行尾空白)。
|
2026-10-23 11:44:21 +08:00 |
|
wandering1
|
3488617bc9
|
docs(门禁说明): 新建逐项门禁文档目录,先落索引 README 与 bsp-err 首篇
用户的原话是:"现在门禁都在干什么,我一概不知。" 现有文档只回答"有哪些钩子、怎么配"
(docs/代码规范/pre-commit使用说明.md),回答不了"这一条到底在拦什么、什么时候会骗我"。
故新开一个目录,**每种门禁一篇**,八段固定结构:查什么 / 为什么要它(拦下过什么真事)/
触发面 / 报错怎么读 / 好处 / **限制与盲区** / 豁免与基线口径 / 改门禁本身要注意什么。
**最后一节是这批文档存在的理由**:只看"拦了什么"的门禁文档会让人以为绿就是对的。而本仓
三个增量拦截门禁(layer-deps 6 条、bsp-err 38 条、id-check 台账 640 处)的绿灯含义只是
"没有比上次更差"。
索引按 39 个 hook → 23 篇规划(16 个主机单测是同机制 16 实例,合一篇;cppcheck 与
test-cppcheck 是同工具两套范围,合一篇),文件直接用 hook id 命名,与提交输出里的名字
一致、可 grep。README 另有一节"三种拦截姿态"——改写型 / 硬拦截 / 增量拦截——分清这三类,
报错时才知道该改代码、还是该还基线。钩子清单、files 范围、pass_filenames 全部从
.pre-commit-config.yaml 实测解析(39 个 id:官方 5 + gitlint + local 33),不是手抄。
本次交付:索引 README + 首篇 bsp-err.md。首篇里把今天踩过的坑全写进"限制与盲区",共 10 条,
例如:只扫 Drivers/BSP(App 层同类问题仍无人管);consume-result 只认单行整句的裸调用,
跨行写的调用按正则形状测不到;must-use 名单靠"返回类型 + 注释关键词"启发式,注释不写
"错误码/失败"就漏、改名就能绕开规则;HAL 族是固定清单,清单外的返回 HAL 状态的函数不在
名单里;return-doc 的判据是"注释块里出现『返回值』字样",**散文里出现这三个字也会放行**
(本仓真发生过两条靠函数说明里的关键词误判通过);基线键带出现序号,--prune 只报"消失"、
不会报告某处只是搬了家;改标签名等于改基线键,必须原子完成。在册数量与构成按当前基线
逐条数出来写(38 = consume-result 37:gd5f2gq5ue.c 28 含 14 处 HAL 丢弃 + 14 处自家原语、
ui_net_sink.c 6 全为 net_close、rs485.c 2、nand_ftl.c 1;err-type 1 为 bool
ui_content_page_open())。
同步指向:AGENTS.md 提交门禁一节改为"每种门禁一篇详解 → docs/门禁说明/README.md",通用
机制仍指 pre-commit使用说明.md;docs/README.md §7.1 增加索引行;.pre-commit-config.yaml 的
bsp-err 注释块顺手更正(原文还写着"三条规则""现 1 条""只能靠书写约定兜着",均已过时)。
迁移状态用索引表的"状态"列跟踪;全部写完后 pre-commit使用说明.md §2 收敛为通用机制 +
总览,同一事实只留一处(docs/文档规范.md 的要求)。
验证:纯文档与注释改动,未触碰构建产物;check_doc_links --all --sections-strict 149 篇
0 问题(新目录的相对链接、跨文档章节引用都能判定);bsp-err 仍 38/38/0;本次受影响文件的
pre-commit 全绿 RC=0;两份新文档字节卫生 ok(无 BOM、无 CR、无 U+FFFD、有尾换行)。
|
2026-10-23 09:48:26 +08:00 |
|
wandering1
|
513becd61d
|
docs(algo): 新增 adc_health 单文件深设计与三张配图
- 新建 docs/算法/采样有效性校验设计说明.md(15 章):判据推导
(100 ms 门限的三条独立依据)、电平/锁存/事件三种位语义与
位号对齐的收益代价、闭锁与 IWDG 兜底责任矩阵、观测盲区、
主机侧验证分工(11 组 TC / 31 断言映射)、现场判读手册、
自测问题与改前必读清单
- 配图走 draw-diagram 生成器路线(脚本 + 产物一并提交):
tools/arch_diagram/gen_adc_health_flow_svg.py 等三个脚本 →
docs/images/ 下三张 SVG;文内另有 2 张 Mermaid(判定主干
flowchart、静默位生命周期 stateDiagram-v2,沿用仓内既有方言)
- 登记与指针:docs/README.md §5.2 加一行 + 变更记录;
docs/算法/采集与算法层设计说明.md §4 与 §13 加深读指针;
本文只写「为什么」,接口表仍由该文档属主,不重复
- 读码确认并如实登记三项(本提交不改代码,待裁):
1) adc_task_init() 全库无调用点,adc_health_init() 因此不在
产品路径,判定正确只依赖 .bss 清零 + 首拍建基线
2) tgap 计帧点数(d-1 加权),adc1_gap 计次数——两侧单位
不对称,心跳里不可直接对比
3) TIM3 停摆时判定层随消费者一起停,最坏约 800 ms + 2498 ms
窗口内 protectTask 仍以旧相量判据(细节见 §10 / §14)
- 门禁自查:pre-commit 目标集全绿(doc-links / id-check /
空白 / EOF / 大文件);主机单测 adc_health 31/31 复跑通过;
9 个新增或改动文件 BOM=无、CR=0、U+FFFD=0
|
2026-10-22 00:43:31 +08:00 |
|
wandering1
|
64d8b052b1
|
docs(algo): App/algo/README 缩成目录索引,详细设计迁入 docs/算法
拆分层级
- 新建 docs/算法/采集与算法层设计说明.md(413 行、13 节)承接机制、契约、
判据与设计理由:定位与边界 / 数据流与初始化落点 / adc_input / adc_health /
sample_ring / phasor / freq(7.1 为什么自适应窗、7.2 判据 J1~J6)/
prot_set / prot_elm / 关键约定与禁令 / 资源足迹 / 验证与判读 / 相关文档
- App/algo/README.md 360 -> 128 行:只留文件清单、依赖、逐文件"改代码必须
知道"的红线、构建与测试入口、新增模块动作;深挖改成逐条指针
- README 保留 §3.1-§3.7 原编号,既有"§3.7"引用不失效
索引与引用同步
- 索引:docs/README.md §5.2 新增行;项目架构总览主题表拆成"设计与判据 /
目录索引"两行;AGENTS.md 与 App/README.md 指向(后者原文还写着 L1/L2)
- 按内容重指(编号仍在但内容已搬走,只核编号会静默指错):App/algo/freq.h、
test/host/freq/freq_test.c、run_unit_test.py、继电保护规划 L2-4 行、
pre-commit使用说明 J4 行 -> 指向设计说明
- ADC采样节拍设计说明的两处指向同步改到新文档
修 README 内过时事实
- 挂载写"八个 .c",实际 uvprojx 内 7 个
- SIM_EXEMPT 写"prot_set / freq 才登记豁免",实际七个全在表内
- freq-unit-test 标"待登记",实际已在 .pre-commit-config.yaml
- 定值项数一处 31->40、一处 32->40;blob 144->176 B 证明是 32->40
- 用例与判据数字不再三处复制:属主是 test/host/<模块>/ 与 docs/测试说明/
门禁
- doc-links --all 无新增问题;--sections-strict 覆盖 10 篇文档通过
- id-check 可判定 82.65%(基线 82.6,容差 0.1);TC 双向追溯差异 124 处不变
- registration-check PASS(1 条已知 WARN);freq 单测 46/46;@build 0 错 0 警
- 全部改动文件无 BOM、无 CR、U+FFFD = 0
|
2026-10-21 11:39:53 +08:00 |
|
wandering1
|
0f0d002afc
|
docs(ADC): 采样节拍设计说明只留现状,历史决策与台架记录移出
删除(已确定的决策与过程记录,无现状信息量)
- §2 方案选型(方案 A 推荐 / 方案 B 备选与结论)
- §9 变更记录整表(9 行"已实现 / 已验收 / 已落地 / 复核修正"叙事)
- §7.1、§10.3、§11.5 三张台架实测对照表 + 反向验证记录 + boot_log 证据行
- 用户决策与过程编号(Task #32 P1-5 方案 a、B1、P0-1/P0-2、v2.0/v2.2/v2.7/v2.8、
"规划未预见""原规划写错了"更正叙事)
- §4 代码改造清单(改造已完成)与 §8 / §10.5 的后续规划口吻
保留并补齐现状
- 链路总览(新增 TIM3 同源 Mermaid)· 实现落点表 · TIM3 配置与"为什么是 TIM3"
(F4 触发清单是硬约束)· ADC1 + DMA 四条硬约束与半区无竞态推导 · 上电自校准
· TPAFE 侧契约与原子快照 · 就绪门与节拍缺失 fail-safe · 单周期时序
· 心跳计数逐个判读(含相位伪影为何阈值取 2)· 性能与资源特征
· 设计边界与已知代价(N-18 无同刻性、滞后一拍、TPAFE 未 DMA 化的前提未定、
调频能力现状)· 设计铁律
- 468 -> 344 行
顺带修掉文档自相矛盾
- 原 §3 / §4 仍在教人配 TIM6(§11 已改 TIM3)-> 全文统一 TIM3
- 上位需求引用写成 继电保护功能复现规划.md §3.2,实际 L1-1 在 §3.1
连带引用同步(7 文件 8 处)
- App/algo/adc_input.c -> §8;App/task/adc_task.c -> §6;Src/main.c -> §3.3;
Src/freertos.c -> §9 与 §10(顺带纠正已失效的"ADC 2 ms 忙等"表述,DMA 化后
单拍取数已零忙等)
- 看门狗设计说明 §6 与 §9 / §4.4;ADC通道映射说明 §4 与 §6;
继电保护功能复现规划 §3.2
- 其中 2 处活断链 doc-links --all 抓不到(整行含"已消""已实现"状态词被豁免),
另写脚本按「文档名 + 章节号」全库扫出后修复
门禁
- doc-links --all(非 SDL2 问题 0,可判定 57% -> 58%)与 --sections-strict 通过
- no-mojibake / trailing-whitespace / end-of-file-fixer / id-check 通过;
task-table / mem-numbers 一致;@build 0 错误 0 警告
- 改动文件均无 BOM、无 CR、U+FFFD = 0;CubeMX 文件的注释改动都落在 USER CODE 区
|
2026-10-21 11:39:52 +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
|
d770e36c7c
|
refactor(NET): 源码注释去阶段化 + 网络两份文档重构 + 不稳根因图更新
- 源码注释:删去自愈收敛阶段
1/1.5/3等 scaffolding 称谓,改为语义引用
(E-02 收口 / F-NET-2/3/4 / docs/网络/网络自愈架构设计.md §5.2 E13);
涉及 net_socket/.h、net_events、net_listener、net_pending、net_types、
net_config、ch395f、time_sync、iec104_serv、ui_net_sink、lftpd、
simulator/sim/net_socket_sim、board/host 测试与探针
- 文档重构:网络自愈架构设计.md 与 Net层阻塞模型架构设计.md 改为现状口径
(删历史节与阶段叙事),NET/README.md、docs/README.md 同步
- 工具与配图:gen_net_instability_svg.py 与
docs/images/网络不稳根因总览.svg 随源码口径一并更新
- 门禁:@build 0 错误 0 警告
|
2026-10-14 22:05:53 +08:00 |
|
wandering1
|
f849c79b7a
|
feat(NET): SEND pending 二期落地 + 末块挂起越界缺陷修复(台架复测闭环)
net_pending.c/h 增设第二张挂起表 s_net_send[](与 recv 表完全独立,收发
互不阻塞);net_send_locked 快速路径改为有界自旋,单次等待超出
NET_SEND_SPIN_MS(2ms) 即登记挂起 send,由 net_send_pending_tick 按主循环
节拍分块推进,netTask 最坏停滞由 1s 压到 2ms。net_listener_retry_tick 的
挂起保险扩展到 send 侧;net_close_locked / 网络重建 / 状态对账三路均先
取消再动作(取消必通知,调用方永不挂死)。
台架复测(A/B 对照 + 插桩定位)发现并修复末块挂起越界缺陷:内层"等本块
发完(SENBUF_FREE)"位于写块之后,写完末块时 sent 已 == len,若该次等待越过
2ms 预算便会调用 net_send_pending_register,而登记函数按 sent >= len 拒收
并回 -1,把一次实际已完整交付芯片的发送报成失败。修复为内层等待开头判
sent >= len 即跳出(末块已交付、SENBUF_FREE 等待是纯保守自旋),并置于
超时/自旋判定之前;该守卫同时保证后续登记必伴随 sent < len。
复验:ftp_regression 连续 19 次 11/11;ftp_integrity_test 20 轮 x 64KB
STOR/RETR SHA-256 20/20 一致(两轮),吞吐稳定约 80KB/s;设备日志零
write error;ST-LINK 回读 No difference found。
文档:Net层阻塞模型架构设计.md 补二期设计与新增 9.1 缺陷记录,netTask
栈实测峰值按本次台架 920B 订正为 1116/3840(FTP 传输期 1164);网络自愈
架构设计.md 吸收原监听生命周期文档、新增编号术语导读表,并把 5.2
"实验锚点速查"的 E 编号含义与 E-02 审计编号歧义写在表头(用户反馈该表
E 编号无法读懂)。
门禁:Keil 0 错 0 警;cppcheck / 编码规范 / 乱码零告警;
check_mem_numbers PASS;check_doc_links --all --sections-strict 142 篇 PASS。
|
2026-10-14 12:05:21 +08:00 |
|
wandering1
|
df13dec479
|
refactor(net): 挂起 recv 模型拆出 net_pending.c/h + 留痕探针编译门控 + E15 归因修正
CI / L0 静态门禁 (pre-commit) (push) Failing after 2m14s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 22s
- E15 归因修正:幽灵状态 0x04+旧端口 = 芯片如实报告拆除中的旧连接
(文档化行为,非芯片故障;bit3=1 为我方设置(ver>=0x46)、
RFC 9293 §3.3.2 Fig5 拆除顺序、WCH 官方博客方案 = close 完成后重开监听)
- 术语统一:全库"了结"→"结束"(约 45 处);阻塞模型 §4 首次出现处定义"五路"
- 注释清理:删孤儿函数头注释、考古叙事改现在时、去不可检索内部编码"L3"
(33 处 6 文件)、banner 去重(唯一理由移到分支现场)
- 挂起超时留痕探针:编译期开关 NET_PENDING_TRIPWIRE(默认 0 = 编译剔除,
省约 150B Flash;排查调用方挂死时置 1,只留痕绝不强制结束)
- 拆模块:net_pending.c/h(363/94 行)承载挂起 recv 模型,
net_socket.c 4059→3661 行;tick 收控制块表参数、settle_close 双参显式传;
net_pending_active 声明移配对头(S17 2.2);仅注册 uvprojx +
check_registration MCU-only 白名单(同 net_listener.c 机制,
模拟器走 net_socket_sim.c 按外部语义模拟)
- 文档:阻塞模型新增全过程小节(单主干流程图)+ §9 排查辅助;
NET README / 函数调用关系 / 自愈架构 / BSD 指南同步;引用关系图重生成
- 台架回归:启动闭环 PASS([ERR]/Fault 零命中、回读一致)、
:7003 重连探针 10/10、FTP 50 连接 STOR 50/50、回归窗口串口日志无异常
- RAM:ER_IROM1 230004B(探针门控后约 -150B),台账已回填
|
2026-10-14 09:53:38 +08:00 |
|
wandering1
|
a12367981d
|
fix(N34): E14 丢中断复核——芯片不丢事件;listen 排事件挪至 LISTEN 前+全局读收口+全库归因更正
48 轮直读 SINT 矩阵(8 周期×6 变体)复核历史"丢中断"说法:芯片侧事件
丢失 = 0。归类:drain 读清消费 3/48(drain-int 探针现场抓获)、门控
竞态 2/48、主机同步 1/48、幽灵态 0/48 未复现。
根除性修复:net_listen_locked / net_listener_try 的排事件读清从
listen 后挪至 LISTEN 命令之前——新连接 CONNECT 落进该窗即被本方读清
吞掉,即"数据被吞"的生产侧自伤机制(台架 3/48 为同形态放大版)。
全局读收口:全局中断寄存器唯一读者 = net_poll(I7);生产/测试/台架
游离全局读全部删除,ch395f.h 声明处加护栏注释。
归因更正:17 文件约 40 处"丢中断"措辞改为"事件未收到/读清消费竞态"
(机制全部保留,仅归因更正);设计文档 §5.2 新增 E14 锚点;Trap
Records TRAP-NET-17/-20/B3 归因更正段;配图生成器与 SVG 重生成。
台架:事件未收到复核探针保留(drain-int / SINT 补读×3 / 超时归类),
下次跑矩阵自动归类;实验注册(main.c/uvprojx)已完全还原。
验证:@build 0 错误 0 警告;ci_local L0 32/0 + gitlint + L0.5
953/953;doc-links --all --sections-strict 通过;@test PASS(无
[ERR],net init 619ms);回归 :7003 300ms×10 = 10/10、:21 n30×50 =
0/50 失败。
|
2026-10-14 02:48:50 +08:00 |
|
wandering1
|
1a35b3684c
|
docs(N34): 自愈审计目录 7 份文档合并为单文档,全库引用同步
CI / L0 静态门禁 (pre-commit) (push) Failing after 44s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 43s
- `docs/网络/N34-自愈审计/` 目录 7 份文档(根因总览 / net 层盘点 /
驱动层审计 / 主流对照 / 汇总裁决 / 实施方案 / 实验方案)合并为
`docs/网络/N34-自愈审计.md`(§0~§6),原目录删除;docs/README.md
索引与变更日志登记归档
- 全库引用同步:4 篇文档 + 驱动/NET/test 代码注释 + 配图生成器与 SVG
- 内容零丢失抽查:E0~E13 实验记录、E6 裁决(命中=0 不立项)、
提交表(含 `925058a` 收口行)均在位
- 门禁:@build 0/0(注释级路径更新);check_doc_links --all 143 文档
通过(净 −6 = 删 7 增 1 吻合);ci_local L0+L0.5 全绿
|
2026-10-13 23:23:55 +08:00 |
|
wandering1
|
c077e9a481
|
merge: 远程 CI 分支 v2-on-ui-ci 合入 v2-on-ui
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
将 origin/v2-on-ui-ci(13 个提交:远程 CI 文档独立成 docs/CI/、
runner 保活/日志编码/gitlint 空转修复、ci_local L0b 等)合入开发主线。
冲突 5 处,按「两侧意图取并集」解决:
- AGENTS.md / docs/README.md:保留主线 待处理内容.md→任务规划/ 重构,
并入 CI 分支的 docs/CI/ 索引行与更新日志
- 测试开发标准流程.md §9.1:取 CI 分支,引用改指
../CI/远程CI完整指南.md 对应小节
- docs/待处理内容.md:接受主线删除,已重构为 docs/任务规划/
- docs/环境与部署/CI配置指南.md:接受 CI 分支删除,已并入 docs/CI/
合并引入的 doc-links 失效已修(doc-links 合并态走 --sections-strict,
自引用解析失败即硬错误):
- CI 指南 §0.0 标题把 ⚠️ 移到编号后(编号须打头才解析得出)
- CI 指南对 待处理内容.md 的引用改指 docs/任务规划/登记簿.md T-7 条
- CI 指南并入来源《测试开发标准流程》§9.4 / §9.2 改为全路径限定
- 测试开发标准流程 §9.4:§0.2/§2/§2.4/§4.1.3 原与 CI 文档路径间隔
超过链式继承上限 40 字符,改为紧跟路径并拆分明细句
- 测试开发标准流程 §9.1:步骤级细节引用同样全路径限定到 CI 指南
|
2026-10-12 19:42:24 +08:00 |
|
wandering1
|
4bad54b607
|
merge: master 的远程 CI 修复带入 v2-on-ui(门禁数字改为分支中立)
把 master 上本轮 10 个 CI 相关提交合入 v2-on-ui,使该分支同样具备可用的
runner 保活与本地门禁自查能力。合并只涉及文档与脚本,零 C 代码改动。
冲突两处,均按"保留 v2-on-ui 新版结构 + 搬入语义"解决:
- AGENTS.md:丢弃 master 侧已被瘦身版取代的旧门禁 bullet,保留其分层边界
行;把"CI 资料集中在 docs/CI/README.md、只跑本机一台 runner"这条指针
并入新版 CI bullet 与文末索引表。
- docs/README.md:两侧都是变更记录历史行,按日期先后并列保留。
数字口径改为分支中立:本分支 26 个钩子 / 10 个主机单测套件,master 是
18 / 3,写死任一数字都会让同一篇文档在另一分支上失真。指南 §6 验收第
8 行、§7 排障表、§10 验收标准改为讲规则(报告数 = 定义数 − 1;runner 数
= test/host 下 run_unit_test.py 个数)+ 分分支实测快照。
验证:@build 0 错误 0 警告;ci_local.py 全绿(L0 25 钩子 + L0.5 10 runner
/ 647 断言,fail=0)。首轮 mem-numbers 失败系 master 构建遗留的 .map 所
致,本分支重新构建后即一致。
|
2026-10-12 18:28:02 +08:00 |
|
wandering1
|
ba40cc0d20
|
远程 CI 文档独立成 docs/CI/:两篇重叠指南合并为一篇,AGENTS.md 压成一行指针
动因:远程 CI 只跑在本机一台 runner(win-stm32-ci)上,其他机器与项目都不涉及,
但内容散在 4 处约 2000 行——两篇高度重叠的指南躺在「环境与部署」里与换机核对清单
并列,AGENTS.md 提交门禁节还塞了 4 条 runner 运维经验,导致每次会话都被这些机器
专属细节干扰。
结构:新建 docs/CI/,README.md 作唯一入口(适用范围 + 章节速查 + 常用命令),
远程CI完整指南.md 为合并稿。
- 合并:CI配置指南 477 行 + Gitea_Runner部署指南 917 行 → 一篇 1300 行;骨架内容
逐行比对核实无丢失(仅章节重编号与相对链接按新位置改写),重复段按"留新版"去重,
独有内容全部搬入(下载/config.yaml 字段语义/不能用 Windows 服务的根因/内网 action
三种处置/check_env 自检/TL;DR/排障表 13 条独有行/MySQL 直查核验)
- 再分配:测试流程 §9.2 两个 job 的步骤细节并入指南 §5.5、§9.4 部署前置表并入 §0.2;
测试流程 §9 只留测试分层视角(覆盖哪些层、触发与 paths-ignore、本地等价、
"CI 不替代本地门禁")
- AGENTS.md:4 条 CI 经验(看门狗 / gitlint stage / UTF-16LE / CI 概览)压成 1 行指针
- 引用同步 6 个文件:docs/README 目录树与索引、项目部署环境要求 3 处、本地工具路径
环境变量方案、待处理内容、scripts/README(补登 3 个 CI 脚本并标注为本机专属)
验证:check_doc_links.py --all 125 篇 0 问题;pre-commit run --all-files 17 项全 Passed。
两篇旧文档以 git rm 删除(历史仍在 git 中);各文档变更记录的历史行按仓库惯例不改写,
只新增 2026-10-12 行。
|
2026-10-12 14:03:44 +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
|
e4134a4723
|
feat(skill): 新增 task-worktree 多任务并行工作树 skill
用 git worktree 给每个任务开独立工作空间,干完由固定命令合回主干,
解决多任务共用同一工作目录时构建产物/日志/登记簿互相踩的问题。
- 机制:worktree + 任务分支 task/<ID>-<slug>(ID 沿用待处理内容编号)
- 目录:仓库同级 _wt/;.venv 与 simulator/SDL2 以 junction 共享
- .workbuddy-ai/ 刻意独占,清场前归并回主工作树
- 命令:new/list/status/sync/lock/done/abort(短命令 @task)
- 锁:build(UV4 不能并发)+ bench(COM6/ST-LINK/设备 IP),
按时效 TTL 判定,不绑定进程存活
- done:merge-tree 预演 -> merge --no-ff -> 残留审计 -> 重生成产物
-> 门禁 -> 清场;门禁未绿则保留工作树;不含 push
- 隔离演练(DTU_INTEGRATION_WORKTREE)暴露并修复 4 个缺陷,
见 docs/环境与部署/并行任务工作树方案.md §11.1
同步:AGENTS.md 主题表、docs/README.md §9.2 与变更记录。
|
2026-10-12 11:56:13 +08:00 |
|
wandering1
|
d1e6bb4ba7
|
W5波+N-19收口:FTP鉴权落地、Trap25三连定案修复(N-30)、N-20/N-23/N-26
N-19 FTP 鉴权:
- lftpd_auth(USER/PASS 状态机 + 连续5次失败锁60s)+ SHA-256
(user||pwd) 口令哈希;config.ini [ftp] 段 user/pwd_hash/write,
出厂 admin/admin 在用有启动告警;lftpd_log.c 删除并入 lftpd_auth
- ftp_cfg 配置读写;台架 ftp_auth_bench.py 13/13
N-30 / Trap 25(CH395F_Trap_Records.md 四次定案全记录):
- 修复1 closed-with-data accept:客户端发完正常 FIN 后芯片按
FUN_PARA(0x09) §5.52② 保留 Socket+RX 缓冲,旧代码把 CLOSED 一律
relisten 自毁缓冲 → STOR 必挂 425;改为接受"已关但可读"连接排空
- 修复2 丢 CONNECT 中断探针 net_lost_connect_probe + last_peer_port
幽灵甄别(拆链窗口握手完成但中断丢失,双信源去抖补 accept)
- 修复3 send_list/send_nlst 批量单发:背靠背 ~60B 小段毒化芯片 TX
(芯片报 SEND_OK 但对端全丢),整份目录一次性写入
- 证伪存档:固定沉降/Socket 轮换冷却/listen 门控(台架 v7 矩阵)
- 台架工具 test/board/ch395f_reuse_bench.{c,h} + host 脚本存档
(不注册编译;实验分支 n30-chip-bench 保留)
N-20:Error_Handler 死循环降级(记录+复位路径)
N-23:scripts/check_registration.py 双端注册反向校验(pre-commit)
N-26:GD5F NAND 直 DMA 调用方缓冲窗口断言
验证:BUILD_OK 0/0;ftp_regression 连跑 4 轮 11/11(修复前
LIST#4/#7 100% 挂、STOR#2 曾 100% 425);ftp_auth_bench 13/13;
@test 启动标记 PASS;ci_local L0+L0.5 全过;doc-links 通过。
登记簿 N-30 已销项。
|
2026-10-11 18:50:24 +08:00 |
|
wandering1
|
eddbedeee8
|
docs(AGENTS): 入口重构——补宏观概况与边界块,瘦身51KB→25.8KB,子域知识入skills
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled
- AGENTS.md 51,067→25,828 B(−50%):审计→迁移→删除,逐节 diff 零信息损失
- 按调研(agents.md 官方/aihero/airflow)补「项目概况」:一句话定位、
数据主线、顶层目录地图、分层边界;平台约束 17 条分 5 组
- 新增「边界(Ask first / Never)」:git commit/push 须明确指示首次入库
- 串口助手、LVGL 模拟器两节移入 serial-assistant / 新建 lvgl-simulator skill
(开关语义按 main.c 实锤);LVGL 两条实证坑移入 ui-verify skill
- 9 条入口独有细节迁移至对应设计文档(存储/看门狗/启动顺序/文档规范/
pre-commit 使用说明/keil-build skill);@test 细节指向自动化测试流程
- 新增 docs/AGENTS编写指南.md:六原则/模板/反模式/维护纪律 + 本仓案例
- 修正 3 处对 AGENTS 串口节的过时引用;docs/README.md 登记新文档
|
2026-10-11 10:44:50 +08:00 |
|
wandering1
|
c936441c83
|
门禁扩容:新增 lv-conf-sync、simulator/ 纳入全部钩子;含 L3 定值/元件框架落地
本轮把"自研代码落在门禁之外"的口子收掉,同时落地 LVGL 特性裁剪与
L3 保护定值/元件框架。
门禁(.pre-commit-config.yaml,26 个钩子)
- 新增 scripts/check_lv_conf_sync.py + 钩子 lv-conf-sync:比对两份
lv_conf.h 的**生效值**(未定义则取 lv_conf_internal.h 兜底默认),
抓 MISMATCH / LVGL 不认的宏名 / 同文件重复定义
- 顶层 exclude 删掉 simulator/:其下 21 个 tracked 文件全是本项目自研
代码,生成物(build/、SDL2/、tests/ref/、shot*)已在 .gitignore;
doc-links 的 exclude 同步删除
- lv-conf-sync 的 files: 覆盖两端配置 → 只改 simulator/lv_conf.h 也触发
(pre-commit 4.x 已移除 always: true,实测只告警并跳过,无兜底开关)
- 新增 prot-set-unit-test / prot-elm-unit-test 两个主机侧单测钩子
- S11(2.3.5) 判定细化:禁的是"用路径找文件",尖括号系统头带子目录
(如 <sys/stat.h>)不再误报;全仓库复核仅 2 处项目代码判定变化
模拟器代码整改(纳入钩子后暴露,全部修代码而非豁免)
- cppcheck 4 处:sim_syslog.c 判空分支内解引用 p_epoch(真实 bug)、
2 处 struct tm 未初始化、1 处指针可加 const
- coding-standard 61 处:44 处函数左大括号并到右括号同行、8 处补函数
注释、3 处补文件头注释块、2 处 __ 前缀保护宏改 XXX_H、2 处 sprintf
改 snprintf(写入字节数与原来完全一致)
LVGL 特性裁剪(F-1/F-2/F-3)
- 两端 lv_conf.h 对齐同一特性子集:删 26 个 LVGL 9.3 不存在的选项名、
3 处重复定义,10 项靠默认值隐式生效的改为显式固化
- 实测对镜像体积中性;价值在防漂移,且模拟器 golden 回归跑的正是固件
实际编译的配置
L3 软件侧
- App/algo/prot_set.* Q10 定值模型(范围校验 / 整表 all-or-nothing /
校验和封存-自检-闭锁)+ prot_elm.* 通用"滞回+定时限"元件框架 7 实例
- test/host/prot_set、test/host/prot_elm 主机侧单测;uvprojx 挂载两处
文档同步
- pre-commit使用说明:§2.8 S11 口径、§2.15 lv-conf-sync 详解、新增 §5.5
复盘(教训:exclude 只写真正不该进钩子的路径)
- AGENTS.md、UI_设计架构 §1.4 第 10 条、RAM 分析、审查报告刷新与销项
验证
- @build BUILD_OK 0/0(Code=194276 RO=15872 RW=876 ZI=139892)
- 模拟器重建:菜单 8 状态像素逐字节一致(池 5368 B)、11 内容页黄金参考
全过(往返 5448 B)、remo sink 0/25600 位差异、--logtest/--cfgtest PASS
- 全仓库 cppcheck / coding-standard / no-mojibake --all-files 全过
- check_doc_links --all 129/0;check_mem_numbers --check 内存数字一致
- 端到端:往 simulator/lv_conf.h 注入一行漂移 → 钩子 FAIL(exit 1)
|
2026-10-11 08:48:49 +08:00 |
|
wandering1
|
54d6d2d5d5
|
docs: 删除 Task #32 停摆分析(已结案),可复用结论并入看门狗设计说明 §11
按登记簿"完成即销项"规则删除 docs/问题记录/UI任务看门狗停摆分析.md
(560 行)。结案依据:累计 38 次上板启动 0 复现(原 L2 基线 3/10),
P0/P1-4a/P1-5/P2/方案 A 全部落地,方案 B 已评估决定不做。
并入 docs/子系统设计/看门狗设计说明.md 新增 §11(只留可复用部分):
- §11.1 三条易误读的判读口径:启动期 MISS start 0x67 是良性 episode;
miss= 是累计不是连续(连续数饱和在 WD_MISS_TOLERANCE=8);
reset cause 不能区分 IWDG 溢出与台架软件复位
- §11.2 诊断四步:先看掩码缺几位(只缺 1 位 = 定点打击,多位 = 全局
饥饿)→ 逐项量化占空比(实测 10%~13%,否掉"CPU 饱和"直觉)→
用计数速率反证空转(ring 恰好 1000/s)→ 用 [PROF] 指认占用者
- §11.3 三条结构性脆弱点(uiTask 唯一 BelowNormal/心跳曾依赖 netTask
往返/自定截止期不可恢复)+ 两个顺带修掉的正确性缺陷(无新帧仍压环
≈3% 频率失配、失败拍静默沿用旧值)
- §11.4 [PROF]/[PROF2] 全字段语义 + v2.8 实测基线(netp=0 是真实值、
adcm 峰值来自心跳日志、uip 地板 = LVGL 帧周期)与三机理判读口诀
- §11.5 三条教训:门控类优化必须保留低频兜底;门控会顺手消灭暴露路径;
事件驱动要核对节拍源启动时刻 vs 消费者创建时刻
- §11.6 明确不做的四条及理由(提 uiTask 优先级会掩盖真缺陷、net_* 有界
等待版会串回执、推流搬出 uiTask、推流塞进 netTask)
UI 推流门控与方案 B 否决理由收进 RemoDispBus 协议说明 §3(该处原本已有
摘要,改为自洽不再回指);就绪门控 API 的约束已在 BSD Socket 指南 §10.1。
引用改指 12 处:ui_task.c、task_prof.c/.h、ui_net_sink.c/.h、docs/README、
RemoDispBus、看门狗设计说明 R7 行、ADC 采样节拍设计说明、BSD Socket 指南
×2、项目审查报告 N-10 ×2。
⚠ ui_task.c / ui_net_sink.c / ui_net_sink.h 是带 BOM 文件,Edit 剥掉了
BOM,已按原样补回 3 字节 EF BB BF(未整文件重写)。
验证:check_doc_links --all 通过(127 个文档,无悬空引用);
@build 0 错 0 警,Code=257660 与删除前一字不差(纯注释改动)。
|
2026-10-11 00:38:50 +08:00 |
|
wandering1
|
9bbe117f97
|
adc: 节拍源 TIM6->TIM3 + ADC1 走 DMA 乒乓双缓冲,消除 2 ms 忙等(P1-5 单拍硬上界办结)
用户选定最彻底方案(B2):DMA + 定时器 TRGO 硬件触发 + 消费上一拍
已完成的半区。对应 P1-5 拆出的"单拍硬上界",现已办结。
硬件事实更正(查 CubeMX 器件库 + 本仓 HAL 头证实):F4 上 ADC1 的
外部触发清单里没有 TIM6/TIM7 TRGO(只接 DAC)。故 1 kHz 节拍源由
TIM6 改为 TIM3(PSC 83 / ARR 999,TRGO=UPDATE),同一个更新事件
同时 ① ISR 脉冲 TPAFE CONVST ② 经 TRGO 触发 ADC1 一轮 9 通道
③ 置位 ADC_WAKE_FLAG 唤醒 adcTask。TIM6 从 .ioc 整体移除。
代码:
- Src/tim.c/h:新增 MX_TIM3_Init(含 MasterSlaveMode),删 htim6
- Src/adc.c:ExternalTrigConv=T3_TRGO + EDGE_RISING +
DMAContinuousRequests=ENABLE;MspInit 挂 hdma_adc1(DMA2_Stream4
循环模式)。DDS 位关掉 = 一轮只发一次请求,静默丢 8 路
- Src/dma.c:DMA2_Stream4 NVIC 优先级 6(CubeMX 换流会把它重置为 0,
优先级 0 会抢占 FreeRTOS 临界区,违反"外设中断 ≥5")
- Src/main.c:周期回调加 TIM3 分支;stm32f4xx_it.c 向量同步
- App/algo/adc_input.c:stm32_scan() → stm32_take(),逐通道
PollForConversion 全删;乒乓半区由完成计数奇偶推出(只读一个
32 位量 → 与 ISR 无竞态);STM32 侧数据固定滞后 1 拍
- App/task/adc_task.c:心跳日志拆出四类计数
观测性:adc1_seq(完成计数)/ adc1_gap(seq 前进 >1 = 丢帧)/
adc1_err(连续 ≥2 拍无新帧 = 停摆)/ adc1_hw(HAL 错误回调)。
单拍无新帧是消费者相位伪影(DMA 完成落在唤醒后 ≈67 µs),不计故障。
验证:
- 主机单测 79 → 101 全绿;反向验证四连均咬(半区奇偶取反 11 条、
停摆拍置 valid 4 条、STALL_RUN_MAX 改 1 为 6 条、gap 阈值 1 条)
- @build 0 错 0 警,Code 256872 → 257660
- @test PASS:adcp 122 µs → 8 µs、adc1_err=0、adc1_hw=0、
adc1_gap=27/20002 拍、adc1_seq 与 seq 恒定偏移 2
- stack_report 7/7 PASS,adcTask 832 B / 余 59%(不变)
- cubemx-survival 新增 5 项审计(TIM3 分支 / T3_TRGO / DDS /
DMA 挂载 / 流优先级),28 通过 0 失败
文档:ADC 采样节拍设计说明新增 §11;看门狗停摆分析 §4.4 与 §8 收口;
算法规划 L1-1/L1-3、通道映射、测试说明、各 README 同步。
|
2026-10-11 00:31:33 +08:00 |
|
wandering1
|
28bd391035
|
问题记录:UI 任务看门狗停摆归因(Task #32)
- 新增 docs/问题记录/UI任务看门狗停摆分析.md,并在 docs/README.md §7.3 登记。
- 否掉"CPU 负载饱和":实测 adcTask 占空比 10%~20%(ADC1 扫描约 67us + 压环与
相量约 10~15us + 超时忙等),且日志 ring 严格 +10000/10s(= 1000 次/秒)
反证 adcTask 每拍都在 osDelayUntil 里睡满、没有空转。
- 定位真因:uiTask 是 required_mask 六个任务里唯一的 osPriorityBelowNormal
(其余五个全 Normal,CMSIS 包装直接把优先级赋给 uxPriority),且其心跳必须
先经 ui_net_sink_poll -> net_accept -> osMessageQueuePut + xTaskNotifyWait
(portMAX_DELAY) 绕 netTask 一次往返之后才发出。失败日志只缺 bit4(UI)、
其余任务心跳全在,与"非全局饥饿"一致。
- 另发现一个独立正确性缺陷:adc_task 在 r == 0(TPAFE 无新帧)时仍压环 +
phasor_run;日志 ring = frames + idle 精确吻合(10001 = 9957+44)。会把重复
采样点塞进 20 点 DFT 窗,造成约 3% 的等效采样率偏移(系统性误差)。
- 给出 P0(压环条件、osDelayUntil 重同步)/ P1(优先级、解耦心跳、ADC 去忙等)
/ P2(观测)分层处置,并建议先启用现成的 TEST_LATENCY_PROBE 测量再定方案。
- 本文只做归因与方案建议,未改动任何生产代码。
|
2026-10-10 18:24:06 +08:00 |
|
wandering1
|
0b0cd0048b
|
补两份主机单测说明文档:卷锁(fail-open)与时间同步(N-17)
- 卷锁单元测试说明.md:33 断言点。钉死 fail-open 不变量(互斥量创建失败时
vol_lock_wait 必须返回 1 且绝不阻塞——defaultTask 是喂狗点)、幂等、超时透传、
判空 release;并说明"白盒置 s_lock=NULL"的取舍与桩只验调用契约的边界。
- 时间同步单元测试说明.md:80 断言点。钉死分片喂狗延时、监听退避、时间包重组
(半包/粘连/EOF/真错/预算耗尽/tick 回绕)、任务主循环;含 setjmp/longjmp 跳出
for(;;) 的手法,以及"C 暂定定义静默合并同名 static 变量"这一无告警缺陷的记录。
- test/host/README.md:补齐 7 套主机单测的清单、运行方式与钩子(原表缺
phasor / adc_input / vol_lock / time_sync 四套),并修正 cfg_file 断言数。
- docs/README.md:主机侧单测(L0.5)表登记两份新文档,并同步修正 cfg_file 断言数。
|
2026-10-10 18:06:43 +08:00 |
|
wandering1
|
3715f8a34c
|
补两份主机单测说明文档:ADC 输入层(L1)与相量层(L2)
按仓库惯例(每个主机侧单测配一份 docs/测试说明/*单元测试说明.md 并在
docs/README.md 注册)补齐上一提交新落地的两个套件。
- docs/测试说明/ADC输入层单元测试说明.md:70 用例逐条列出(init 复位 /
语义映射表 / map_check / ADC1 顺序扫描与 Rank 到通道判据 / raw 守卫与
补码 / poll 契约 / rc 与 errs 观测);含桩表与"反向路径不可达"说明。
- docs/测试说明/相量层单元测试说明.md:57 用例(系数表 / 幅值相位 /
直流与谐波抑制 / 任意次谐波提取 / 频偏 / 采样环 / 实例层 / 滑动窗 /
双区交换 / phasor_zero 与 init 清零);含 sqrt2/N 系数约定与"暴力重算"
取舍说明,并记录 L2-2 实例数(规划 4 vs 实现 5)待对齐。
- docs/README.md:主机侧单元测试(L0.5)表新增两行。
doc-links / mojibake / EOF 等钩子全绿。
|
2026-10-10 17:53:48 +08:00 |
|
wandering1
|
f0300761ae
|
串口采集/测试去重:删 tools/serial_tool 与 test/host run_boot_test/verify_log 副本,引用改指 .dsh/skills 串口 skill
|
2026-10-10 15:13:23 +08:00 |
|
wandering1
|
aac5f99fe9
|
移除 OpenCode 配置与命令,技能与串口单一配置源迁移至 .dsh/skills 与 .serialtest,同步更新全部文档引用
|
2026-10-10 14:05:36 +08:00 |
|
wandering1
|
e89fe54a97
|
重写看门狗设计说明为现状说明:删立项前旧描述、补FTL心跳路由与取证机制、修掩码与复位归因
|
2026-10-10 10:57:31 +08:00 |
|
wandering1
|
0779d3a075
|
栈整改不抬栈:删旧档迁移、FIL静态化、日志行缓冲按模块收紧、钩子脱离HAL,defaultTask链5312→2776B
|
2026-10-10 10:17:00 +08:00 |
|
wandering1
|
6f3891a6b9
|
ADC 通道映射表建档(V0.1 语义固化)+ .ioc 启用 ADC1 九通道
新增 docs/硬件平台/ADC通道映射说明.md:17 路语义↔网名↔通道号权威映射
语义:UA/UB/UC/UN=AIN1~4、IA/IB/IC/IN=AIN8~11、V_ZL2=温度,其余备用
勘误:PC4=ADC12_IN14(非 IN12);PB0=ADC12_IN8(V0.0 B5 定性有误)
勘误:PC5=ADC12_IN15;网名 ADC17 承载 UB,不是 V_ZL2
.ioc:PA0~PA7/PC4 → ADC1_IN0..7/IN14,Rank1~9 + 144 cycles + 软件触发
.ioc 键名与取值逐条比对 CubeMX 自带 DB(aditf2_v1_1_Cube)后写入
尚未 Generate Code:adc.c 与 HAL adc 驱动未入库,生成后需注册 uvprojx
|
2026-10-09 17:17:32 +08:00 |
|
wandering1
|
9734c2526a
|
新增产品需求设计文档:完整产品需求基线
基于项目全量内容编写 docs/产品需求/产品需求设计文档.md,作为面向
产品的需求基线,覆盖:
- 产品概述:定位、形态与部署、设计目标与原则、产品范围
- 系统架构:六层分层、六任务模型、就绪屏障、启动时序、线程间通信
- 硬件规格:主控/内存、V0.1 外设引脚、存储器件、版本差异、平台约束
- 功能需求:网络/存储/时间/配置/日志/UI/看门狗/LED(已实现)+
ADC/RS-485(待实现)
- 接口规范:端口、RemoDispBus、对时、FTP、配置格式、串口、对外 API
- 非功能需求:可靠性、性能指标、内存预算、测试门禁、双端、权限
- UI 规格:屏幕/菜单树 42 节点/内容页/密码/字体
- 待实现项与路线图(阶段 B/C/D)、验收判据(构建/自检/现场/台架)
同步在 docs/README.md 新增 §3 产品需求、§2 阅读顺序置顶、§1 目录树
登记产品需求/,后续章节号顺延。
|
2026-10-06 02:48:54 +08:00 |
|
wandering1
|
75c234b0c2
|
docs: 项目审查报告移入 问题记录/,删除空的 审查记录/ 目录
让评审报告与 待处理内容.md 的分工更直观:
- git mv 项目审查与优化建议报告.md → docs/问题记录/(与 Trap 台账、
错误码传播审计同处"专项审计"目录);rmdir 空的 docs/审查记录/。
- docs/README.md:§8 标题改为「评审报告 · 环境与部署 · 外部资料」,
§8.1 改为「评审报告」,目录树删 审查记录/、补 问题记录/ 说明,
按角色导航改为 §8.1/§8.3,补 2026-10-04 变更记录。
- 根 README.md 目录树同步。
- docs/文档规范.md §1.1 现有目录列表、§6 归属表同步。
- 看门狗设计说明.md / 待处理内容.md 的路径引用重定向。
pre-commit 17/17 Passed。
|
2026-10-04 02:34:40 +08:00 |
|
wandering1
|
f4fea70749
|
docs: 合并 4 份待办文档为统一登记簿 待处理内容.md
合并 docs/待处理内容.md(N/S/T-x)、审查记录/项目审计改进清单.md(P-x)、
审查记录/下一步任务规划.md(阶段与基线)、审查记录/测试与架构改进建议.md
(S1x/A-x)为单一《待处理内容(统一待办登记簿)》。
- 结构:编号空间与来源 / 未闭环一览 / 任务排序(阶段 A~D)/
逐条详述 / 待验证与待确认 / 设计基线 / 诊断基线 / 内存预算 / 维护约定。
- 编号沿用且不回收;E-xx 仍由 错误码传播审计.md 独立维护。
- 删除 3 份被合并文档;重定向下游引用:README、AGENTS、审查报告、
实机测试实施指南、Net 层架构、NET/cfg 模块 README、脚本注释。
- 同步订正计数:P1=2(+1 收尾) / P2=10 / P3=6。
pre-commit 17/17 Passed。
|
2026-10-04 02:28:52 +08:00 |
|
wandering1
|
7f393956cc
|
测试与架构改进建议:删除已落地条目,只保留待办
- 12/14 条建议已落地,按"只保留待办"约定重写本文件
- 保留:S12 断言宏、S1-c 可选单测、A-4 采集链路测试约束
- 保留:A-5 残余(CI 体积门禁盲区)
- 保留:错误码通道四要素(设计基线,供后续驱动接入沿用)
- 删除:S1-a/S1-b、S2~S11、S13、S14;T-1~T-5;A-1~A-3/A-6/A-7
- 删除:评价表/盘点表、路线图、总结、变更记录
- 同步修正 6 个外部文档对本文件章节的死引用
- 新增"编号约定":S/T/A 编号不随条目删除而回收
|
2026-10-04 02:12:41 +08:00 |
|
wandering1
|
e7442cc73f
|
下一步任务规划:删除已完成内容,只保留待办
按用户要求,本文件只保留"待办",完成项直接删除、不留变更记录(历史见 git log):
- 删 §1.1「已闭环」整表;§1.3 结构性判断 3 条 → §1.1(去掉已完成项引用)。
- 阶段 A:删 A1~A4(已闭环),仅留 A5(P1-7 待手册)。
- 阶段 C:删 C2(GD5F 错误通道,已闭环);C5 去掉 E-34/E-04 删除线。
- 阶段 D:删 D1(P1-10,已闭环)。
- §3 顺序图同步;§5 维护约定改为「完成即删、不留变更记录」。
- 删文末「变更记录」表(属已处理内容)。
同步修正外部引用:
- docs/README.md 索引描述改为「只保留待办,完成即删」。
- 实机测试实施指南 §10 P1-8 去向:上游由「下一步任务规划 阶段 A」改为「项目审计改进清单 P1-8」;
抬头上游描述「(阶段 A)」→「(任务排序)」。
验证:pre-commit --all-files 17/17 Passed。
|
2026-10-04 01:42:44 +08:00 |
|
wandering1
|
aef1d92b3f
|
实机测试实施指南重构为纯执行流程:步骤1~7+状态标记,已完成事项(S7/A1~A4)细节与证据移出至各模块文档,§1改执行流程总览,外部引用同步
|
2026-10-03 22:45:19 +08:00 |
|
wandering1
|
599776cd55
|
实机测试实施指南§3.2去"待上板"框架:A1~A4已落地并真机验证,改写为客观事实记录(列名改实施内容+验证判据),§1总览P0-B状态改已闭环,抬头与README索引同步为真机验证状态
CI / L0 静态门禁 (pre-commit) (push) Failing after 17s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 18s
|
2026-10-03 22:27:30 +08:00 |
|
wandering1
|
ddbba714f7
|
实机测试规划更名为实机测试实施指南:与文档性质(常设执行判据)对齐,H1/README索引同步,引用面仅1处
|
2026-10-02 23:51:31 +08:00 |
|
wandering1
|
3cc08f5d53
|
实机测试规划改造为执行判据说明:删除一次性台架窗口状态(§0.5取证记录)与规划框架,A1~A4代码状态按代码核对改写,16处外部引用重指向模块文档
|
2026-10-02 23:46:27 +08:00 |
|
wandering1
|
6aae6bd34e
|
docs: 新增实机测试规划(无 MCU 窗口的验证债执行面)
|
2026-10-02 14:05:03 +08:00 |
|
wandering1
|
d9425ddd23
|
测试:补启动段可观测性与模拟器差距清单,run_all_suites 加只编译模式(S10+S13+S6)
CI / L0 静态门禁 (pre-commit) (push) Successful in 1m10s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 25s
|
2026-10-02 13:57:25 +08:00 |
|