wandering1
49f3e2dac5
CI runner 修"双看门狗抢 .runner.lock":-StartNow 先清残留进程再启动
...
实测发现(比文档问题更要紧):runner 网页 online、-Status 说 daemon 在跑,
但 runner-watchdog.log 每 10 秒刷 "starting daemon → daemon exited, exit code 1",
daemon 日志写 "another gitea-runner process is already using .runner" /
"runner file is already locked by another process"。
根因:Unregister-ScheduledTask 不会带走旧实例启动的进程。13:22 重跑 bootstrap 时,
12:53 起的旧看门狗成为孤儿并继续养着旧 daemon,旧 daemon 占住 .runner.lock,
新注册任务启动的看门狗永远抢不到锁。online 是旧 daemon 在硬撑——任务实际谁也没管,
日志还在以约 20 MB/天 增长。
- ci_runner_bootstrap.ps1:-StartNow 新增 Stop-StaleRunnerInstances,先停孤儿看门狗
再停残留 daemon(顺序不能反:只杀 daemon 会被活着的看门狗 10 秒内重拉),启动后
等 12 秒回显单实例确认;-Status 新增重复实例计数 + daemon 日志锁冲突检测
- 指南 §3.4 补注销不停进程的说明与"纯注释改动不需重启任务";§7 排障表加
"online 却每 10 秒重启"一行(含手工应急命令)
- §3.2 / README:deploy_runner_task.ps1 与 run_runner.cmd 状态由"仍在磁盘、建议删除"
改为"已删除";README 补重跑部署前的锁冲突警示
机器侧同步(不在版本库):config.yaml 头部"常驻改用 sc.exe / New-Service"是 §3.0
已证伪的错误指引,改为看门狗口径并指向本文——改后 YAML 可解析且所有配置值逐项与
改前一致(只动注释);删除两个废弃脚本前核实计划任务动作目标是
run_runner_watchdog.ps1,删除不影响在跑 runner;check_env.ps1 指向废弃脚本的提示
改指 bootstrap(带 BOM 文件,改后 BOM 完好、语法 0 错)。
验证:pre-commit run --all-files 17 项全 Passed;bootstrap parse 0 错、纯 ASCII、
-DryRun 正常。当前 runner 仍 online(旧 daemon 硬撑),彻底归一需管理员跑一次
-StartNow 清残留。
2026-10-12 17:37:19 +08:00
wandering1
8b35769a5c
CI 文档单一口径清理:以本机实测现状为准,旧方案降级为"勿照抄"警示
...
合并稿初版对 4 处分歧采取"两说并存 + 衔接注",长期看是隐患(读者可能照抄失效方案)。
本次先实测取现状,再统一口径:gitea-runner v4.0.1 / D:\Docker\act_runner /
--instance http://127.0.0.1:3001 / labels windows:host / config.yaml 实际值。
- 注册口径:删掉 act_runner v0.2.11 + C:\act_runner + 公网域名的可复制命令块,只留
"勿照抄"警示——核实 C:\act_runner 至今不存在,且 v0.2.x 与 v4 命令集不兼容,
照抄会装出连不上 Gitea 的 runner
- config.yaml:示例 fetch_timeout 由 5m0s 改为磁盘实际值 1m0s(超 RPC timeout 1m 会被
截断并刷告警)、timeout 统一 30m0s,两处示例块对齐真实文件
- 常驻口径:§3.2 deploy_runner_task.ps1 标为已废弃并写清失效机理(单次 daemon 是
"正常退出",计划任务失败重启永不触发);§3.3 手动等价命令重写为看门狗版任务对象
(旧版会教人手搓出坏配置);§10 TL;DR 第 4 步改指 ci_runner_bootstrap.ps1
- 数字口径:L0.5 期望值更新为 288/288(2026-10-12 实测),run#8 的 39/39 与 278/278
标注为历史快照——判定只看 fail=0 与 A==B,不拿历史数字当基准
顺带同步到现状:健康三查与排障表改用现行日志名(runner-daemon.log /
runner-watchdog.log;runner-stdout.log 标为遗留并说明其 ASCII+UTF-16LE 混编码);
BOM 示例对象换成 check_env.ps1 并注明看门狗是纯 ASCII 无需 BOM;配套脚本表补
run_runner_watchdog.ps1,并警示磁盘上仍存的 deploy_runner_task.ps1 / run_runner.cmd
误执行会把看门狗任务覆盖回单次任务;补"Next Run Time 为空属开机触发器正常表现"。
保留不动:机器级 DTU_* 为正式通道、全局 site-packages 为兜底——这是设计的降级链,
不是文档分歧。
验证:check_doc_links.py --all 125 篇 0 问题;pre-commit run --all-files 17 项全 Passed。
2026-10-12 17:06:29 +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
e6bcad86cb
修看门狗日志编码:*>> 在 PS5.1 默认写 UTF-16LE,污染同一个日志文件
...
现场(2026-10-12 注册计划任务后实测):runner-stdout.log 尾部按 UTF-8 读出来
是 "t i m e = 2 0 2 6 - 1 0 - 1 2 ...",即每个字节后面跟一个 NUL。
根因正是我自己刚写进文档的那条坑:PS 5.1 的 *>> 重定向由 Out-File 实现,而
Out-File 的默认编码是 UTF-16LE。同一个文件里 Log() 用 Add-Content -Encoding
ascii 写 ASCII 行、daemon 输出却以 UTF-16LE 追加,于是"一个文件两种编码",
排障时按 UTF-8 读就是乱码——等于把唯一的 runner 现场日志弄成不可读。
- daemon 输出改到独立文件 runner-daemon.log,显式 Out-File -Encoding utf8
(不用 ascii:提交标题与作业输出可能含非 ASCII,ascii 会打成问号)
- 看门狗自身日志改名 runner-watchdog.log,与 daemon 输出彻底分离
- 模板与生成物均校验通过:parseErrors=0、nonASCII=0
- 旧 runner-stdout.log 保留作历史,不再写入
2026-10-12 13:21:06 +08:00
wandering1
038e2cfba3
合并后对齐钩子计数:master 已 18 个,并补记 stages 的真实来源
...
master 比本分支基线多一个 test-cppcheck 钩子,故"定义数 / CI 报告数"由 17/16
变为 18/17(实测本地跑 --all-files 得 17 条:passed=16 failed=1,那 1 个 failed
是本机 .map 陈旧导致的 mem-numbers,与门禁逻辑无关)。
同时更正一处机制性误述:stages:[commit-msg] 并不在项目配置里,它写在 gitlint
上游的 .pre-commit-hooks.yaml(本机可查证 ~\.cache\pre-commit\repo*\),所以在
.pre-commit-config.yaml 里 grep stages 一无所获、极易误判成"没有限制"。
受影响四处:AGENTS.md、ci.yml 头注释、测试开发标准流程 §9.1、CI配置指南 §6 与
变更记录,另 ci_local.py 文档串。
2026-10-12 13:09:19 +08:00
wandering1
daee6e05f8
合并 CI 门禁修复:runner 看门狗 + Python/cppcheck 探测回归 + gitlint 提交信息门禁
2026-10-12 13:02:07 +08:00
wandering1
0f0ea03ff4
修复bootstrap注册崩溃:StartWhenAvailable属任务设置而非触发器
...
现场:用户以管理员跑 -SetEnv -StartNow 时脚本抛
SetValueInvocationException(触发器上没有 StartWhenAvailable 属性),
而它是在"已注销旧任务、尚未注册新任务"之间抛的,等于把 runner 任务删没了。
- StartWhenAvailable 改设到 settings(MSFT_TaskSettings 继承属性,
CIM 属性列表里看不见但可直接赋值,实测 StartWhenAvailable=True)
- 任务对象改由 New-WatchdogTaskPlan 统一构建,先构建、后注销旧任务
- Register-ScheduledTask 失败时显式告警"旧任务已删、CI 裸奔"并 exit 1
- 新增 -DryRun:免管理员即可全量校验 action/trigger/settings
- -Status 增补上次运行时间与返回码,并提示"非管理员看不见任务"
同时更正根因:旧计划任务其实一直存在(非管理员会话看不见,先前误判为
"从未注册"),但它跑的是单次 run_runner.cmd——daemon 属"正常退出"而非
"失败",计划任务的失败重启根本接不到,必须靠看门狗循环重拉。
2026-10-12 12:52:27 +08:00
wandering1
20ee35b76a
修复CI门禁三因:runner掉线致12个job零日志、L0探测回归全灭、gitlint在CI从不执行
...
1) runner 掉线:run 16~21 共 12 个 job 零日志。gitea-runner v4 的
daemon 无服务支持、首次 Declare 失败即退出进程,Gitea/机器重启
一次 CI 就静默停摆;叠加 cancel-in-progress 后症状是"任务凭空
消失"。新增 scripts/ci_runner_bootstrap.ps1:等 Gitea 就绪 +
崩溃自拉起看门狗 + 开机计划任务 + -SetEnv 写 MACHINE 级 DTU_*。
2) L0 自 33a4aa4 起在 runner 上必挂:Python 候选被收窄成 PATH python
(msys64,无 pre-commit) + 仓库 .venv(gitignore),cppcheck 目录兜底
亦被删,而机器级 DTU_* 从未设置。探测收进 ci_find_python.ps1
(两 job 共用、可离线自测、恢复机器级安装兜底)。
3) gitlint 声明 stages:[commit-msg],而 --all-files 只跑 pre-commit
stage → 17 个钩子定义 CI 只报 16 个且全绿。新增
ci_gitlint_range.ps1 逐条校验本次范围,ci_local.py 增 L0b 段。
另:GITHUB_ENV/PATH/OUTPUT 写入显式 -Encoding ascii(PS 5.1 的
Out-File -Append 默认 UTF-16LE,会把带 NUL 的行追加进 UTF-8 文件)
2026-10-12 12:39:27 +08:00
wandering1
66186e1dae
chore: 清理 .gitignore 合并残留(死忽略项 + .venv 重复)
...
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled
合并 v2-on-ui 时 master 侧的两条忽略项成为残留:
- tools/serial_tool/state/ —— 该目录在 v2-on-ui 已删除,忽略规则失效
- .venv/ 重复 —— 与 v2-on-ui 的 "# Python venv (unified env, ...)" 重复
删掉这 6 行后 master 的 .gitignore 与 v2-on-ui 完全一致(均 138 行)。
*.dep / *.suo 的重复是历史遗留(合并前即存在),本次未动。
2026-10-10 16:55:12 +08:00
wandering1
f81747f7e3
Merge branch 'v2-on-ui' into master
...
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled
把 v2-on-ui 开发主线(250 个提交)合并进 master:涵盖 B0 产品定义、
B1 ADC 采集链路、1 kHz TIM6 采样节拍、L1-3/L1-4 语义通道映射、
@build/@download 收敛到 .dsh/skills/ 下的 skill(删除 build.bat /
download.bat / reset.bat)等。
master 侧 3 个提交(.gitignore 忽略项 + simulator/sim_config.ini)
已保留,无冲突。
2026-10-10 16:46:28 +08:00
wandering1
5009a844a9
收敛 reset.bat 到 stlink-flash skill 并删除该批处理
...
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled
stlink_flash.py 新增 hard 子命令(-c SWD RM=Hrst -HardRst PULSE=100),
RM= 被 CLI 拒绝时自动降级为系统复位并打印 RESET_NOTE;至此 reset.bat 的
全部子命令(复位/hard/halt/run/list/flash/cmp)均已由 skill 覆盖。
删除 MDK-ARM/reset.bat(git rm)。@build/@download 两条旧批处理入口至此
全部收敛到 .dsh/skills/ 下的 skill,一个能力一个实现。
同步更新引用:AGENTS.md、README、MDK-ARM/README、7 篇 docs、4 个 skill
(stlink-flash/serial-boot-test/new-machine-setup 及 config.example.json)。
真机验证:hard 子命令 RM= 被拒 → RESET_NOTE → 回退系统复位 → STLINK_RC=0。
2026-10-10 16:41:46 +08:00
wandering1
5defabcabb
build: 删除 MDK-ARM/download.bat,烧录收敛到 stlink-flash skill
...
- test/run_all_suites.py 是唯一执行它的地方:DOWNLOAD_BAT 改为 STLINK_FLASH
(.dsh/skills/stlink-flash/scripts/stlink_flash.py);直烧改
[py, STLINK_FLASH, "flash"](原先把 .bat 包给命令行解释器执行);
--flash-cmd 改由同一常量拼出,不再硬编码 .bat 路径
- 机制变化(须知晓):原 download.bat 走 UV4 -f(CMSIS-DAP),现走
ST-LINK_CLI -P <hex> -Rst -Run —— 与 .serialtest/config.json 的
flash_cmd、AGENTS.md 烧录铁律、回读 -CmpFile 要求同源;6.5s/1MB
也快于 UV4 路径
- AGENTS.md / 环境与部署 3 篇 / ST-LINK_CLI 复位说明(原文写"正式流程仍以
download.bat 为准",已反转)/ 自动化测试流程 / 串口助手设计说明 /
链路延迟 / m2_data / README / MDK-ARM/README:引用改指 skill
- .gitignore:download_log.txt 条目保留并注明 legacy(他机残留物不变
untracked);build 日志注释同步
- 保留 MDK-ARM/reset.bat:其 hard/halt/run 子命令是 skill 没有的
- 刻意未改:docs/问题记录/项目审查与优化建议报告.md 的 P2-15(史实)
- 验证:run_all_suites.py --dry-run 解析出 skill 路径;doc-links 123 通过
2026-10-10 16:28:58 +08:00
wandering1
4f71947934
chore: .gitignore 构建日志注释改指 keil_build.py
...
build.bat 已删除(c77c582),该注释里的 "regenerated by build.bat"
随之失效。
2026-10-10 16:24:46 +08:00
wandering1
c77c5824f9
build: 删除 MDK-ARM/build.bat,@build 完全收敛到 keil-build skill
...
- test/run_all_suites.py 是唯一真正执行它的地方:BUILD_BAT 常量改为
KEIL_BUILD(.dsh/skills/keil-build/scripts/keil_build.py);两处构建点
改传 --timeout(脚本内超时先于 _run 超时触发,超时得 rc=1 + BUILD_FAIL
文案,而不是被 _run 杀掉)
- AGENTS.md / keil-build SKILL.md / new-machine-setup SKILL.md:删除
"等价原生入口"口径,改为注明该文件已于 2026-10-10 删除
- 环境与部署 3 篇 / 项目架构总览 / README / MDK-ARM/README /
download.bat 注释 / check_mem_numbers.py 提示串:移除 build.bat 引用
- 刻意未改:docs/问题记录/项目审查与优化建议报告.md 的 P2-14 / N-18
(历史审计条目;doc-links 不校验裸文件名,保留不影响门禁)
- 验证:keil_build.py --timeout 300 -> BUILD_OK / rc=0;
run_all_suites.py --dry-run 正确解析 skill 路径;doc-links 123 文档通过
2026-10-10 16:23:54 +08:00
wandering1
7a54fdbc73
docs(build): @build 统一为 keil-build skill,build.bat 降为等价原生入口
...
- AGENTS.md 构建条:@build = keil-build skill(写明 UV4 解析链、退出码
0/1/2/3、日志路径);MDK-ARM/build.bat 明确为等价原生入口,并列出
它相对 skill 缺的三项(无超时保护 / UV4 只认 DTU_KEIL_UV4 / 失败 dump 整份日志)
- keil-build SKILL.md「本仓库」段同步:skill 即 @build 口径
- 3 个 skill(new-source-file / ui-verify / new-machine-setup)与 8 篇
docs、README、MDK-ARM/README、环境与部署 3 篇:命令示例与 @build
标识统一改指 skill
- scripts/stack_report.py 的构建提示串改指 skill
- 环境与部署:DTU_KEIL_UV4 使用方补 keil_build.py;反向测试期望的报错
文案对齐 skill 实际输出(BUILD_ENV_ERROR: ... is set but not a file)
- 刻意未改:docs/问题记录/项目审查与优化建议报告.md 的 P2-14/N-18
历史审计条目(属史实记录);test/run_all_suites.py 的 BUILD_BAT
常量(是代码、非文档,改动需另做验证)
2026-10-10 16:19:14 +08:00
wandering1
43c958cac1
docs(agents): AGENTS.md 按项目现状更新(L1 层/钩子清单/栈数字)
...
- 提交门禁钩子清单 4 -> 18 个:补齐 test-cppcheck / no-mojibake /
coding-standard / doc-links / task-table / mem-numbers /
cubemx-survival / 三个主机侧单测 / test-suite-switch
- 提交信息补"正文每行 <=80 字符"(gitlint 默认 body-max-line-length 未关)
- ADC 取数条补 L1 采集层消费者入口 adc_input_poll/adc_input_raw
- E-59 闸门 adcTask 栈数字 504 B/75% -> 560 B/72%(2026-10-10 实测)
- 任务数 6 -> 7(新增 adcTask),栈表脚注同步
- 新 .c 注册补"新目录还须加 uvprojx IncludePath"(本次踩坑)
- 架构要点新增 App/algo/(L1/L2 落点)一条
- requirements.txt 注释指向已删的 tools/serial_tool -> .dsh 串口 skill
2026-10-10 16:11:20 +08:00
wandering1
d59c2198eb
feat(adc): L1 采集层落地——STM32 ADC1 扫描 + 语义通道映射
...
新增 App/algo/adc_input.c/h(L1 采集与预处理层,落实 L1-3/L1-4):
- L1-4 语义通道映射表 k_adc_map[]:UA/UN/IA → TPAFE buf[6]/[5]/[2];
UB/UC/IB/IC/IN/TEMP → STM32 ADC1 CH14/3/6/1/2/5。消费侧一律经
adc_input_raw() 按语义取数,不写死下标(V0.2 改版只改表内容)。
- L1-3 STM32 ADC1 9 通道软件触发顺序扫描:HAL_ADC_Start + 逐通道
PollForConversion/GetValue(EOC_SINGLE_CONV + 无 DMA,可逐通道轮询)。
- adc_input_poll() 统一"TPAFE 原子快照 + STM32 扫描";
adc_input_init() 做映射自检(STM32 映射通道必落在扫描序列内,否则
返回 -1),挡住"映射到不扫描的通道 → 恒读陈旧值"的静默错。
集成:
- adc_task.c 取数改走 L1 层(首帧日志补全 8 路 + 温度;心跳增
adc1_rc/adc1_err 观测 STM32 侧健康度)。
- app_main.c 在 tpafe5160_init() 之后调 adc_input_init(),失败记
SYSLOG_SELFTEST("ADC map fault")。
- Keil 工程挂 adc_input.c 并加 ../App/algo 包含路径。
- 文档同步:继电保护规划 §1.2/§3.1(L1-3/L1-4 改 ✅ )、ADC通道映射说明
§7/§8/§9、产品需求 §5.9/§9、架构总览 §7、AGENTS.md、App/README.md、
App/task/README.md、新增 App/algo/README.md、boot_log_data 清单。
验证:
- @build 0 错 0 警;镜像无源文件新于 hex。
- 台架 @test PASS:ADC input layer init OK、adc1_rc=0/adc1_err=0
(30 s ≈27 万次转换零超时)、seq 仍 1000.0 Hz、adc 栈峰值
528→584 B(余 71%)、回读一致、零 [ERR]/HardFault。
证据 docs/测试说明/boot_log_data/20261010_prod_adc_l1_boot_log.txt
- 内存快照已刷新(Flash 269,404→270,712 B)。
2026-10-10 16:06:31 +08:00
wandering1
b80f59cc5d
fix(bench): ST-LINK_CLI 子进程加 stdin=DEVNULL,闭环不再挂死
...
- stlink_flash.py::run_cli 与 run_boot_test.py::_run_cmd 调 subprocess.run
时未给 stdin=DEVNULL:ST-LINK_CLI 编程完成后停在 "run application to
exit" 等 stdin,stdin 是未关闭管道即永久挂起(编程其实已成功、板子已
复位运行)→ 闭环误判 flash rc=-1(180s 超时)
- 归档 ADC 1kHz 台架证据 boot_log_data/20261010_prod_adc_tim6_boot_log.txt
并在 README 清单登记
- 同步 ADC采样节拍设计说明(状态→通过台架验收、新增 §7.1 实测)
与 继电保护功能复现规划 L1-1
2026-10-10 15:46:21 +08:00
wandering1
970e574433
feat(adc): 1 kHz 采样节拍改由 TIM6 硬件定时器触发
...
- CubeMX 加 TIM6(PSC=83 / ARR=999 / ARR 预装载 / NVIC 抢占优先级 6)
- Src/main.c 回调加 TIM6 分支触发 CONVST(USER CODE 区)
- app_main.c 用 HAL_TIM_Base_Start_IT(&htim6) 替换单次触发
- adc_task.c 退化为纯消费者(1 ms 轮询仅作消费节奏)
- @build 0 错 0 警;台架 @test 验收待做
- 同步 ADC采样节拍设计说明 / 继电保护复现规划 / AGENTS / TPAFE README
2026-10-10 15:24:02 +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
da66c500ea
fix(console): gate adcTask logs on console-writer readiness
...
B1 on-board closed loop surfaced a byte-level console interleave: before
the console writer (defaultTask) registers, con_append() routes to
dbg_console_write_raw() -> con_tx_bounded(), which is register-level
polling with no mutual exclusion. adcTask logged every 1 ms, so its
first-frame line collided with defaultTask's [NAND_FTL] init line and
the required marker spanned two interleaved lines -> false FAIL.
- console_log: add dbg_console_writer_ready() (returns s_con_writer_up)
- adc_task: gate first-frame and 10 s stats logs on writer readiness;
defer the first-frame report until the writer is up
- docs: close B1/P1-1 in the registry; flip stale "remaining @test"
notes; correct the console doc's obsolete "drop-only, no interleave"
claim (that held for HAL gState, not register-level raw send)
Bench (run_boot_test.py): VERDICT PASS, readback OK. adcTask
frames/seq +10000 per 10 s = 1000 Hz, idle=0, frst_err=0; stack
496/2048 (75%). @build 0/0.
2026-10-10 14:53:36 +08:00
wandering1
7c4b724057
新增 cubemx-regen、board-test-suite、new-machine-setup、mem-budget 四个项目级 skill
2026-10-10 14:41:30 +08:00
wandering1
883c9dd0cc
feat(adc): B1 实现 ADC 采集链路(adcTask + 看门狗)
...
B1(ADC 采集链路)落地,消化 P1-1:
- adc_task.c:空桩 -> 真实消费者。每 1ms 触发一次 CONVST,
用 tpafe5160_snapshot() 原子取数(AGENTS 铁律)+ 帧统计 +
每 10s 心跳日志。只取数,不做保护运算。
- Src/freertos.c:手工创建 adcTask(512 words / Normal,落
USER CODE 保护区,同 timeSyncTask 先例)。
- task_watchdog:新增 TASK_WD_ADC;required_mask 产品 0x37 ->
0x77、ENABLE_HW_LAYER_TESTS 0x35 -> 0x75。
- default_task.c:栈水位探针增列 adcTask(extern + 表项)。
- 脚本:stack_report.py 增 ROOTS/RUNTIME_ALIAS;gen_task_table
增 adcTask(README/AGENTS 任务表已 --write)。
- 单测:watchdog_test.c beat_all/掩码断言同步(39 断言全绿)。
- 文档:待处理内容/看门狗设计/RAM 方案/继保规划 同步。
验证:@build 0 错 0 警;stack_report 静态最坏链 504B(余 75%);
pre-commit 全绿。剩 @test 实机闭环。
2026-10-10 14:33:32 +08:00
wandering1
dee6233d50
重建保护规划文档:恢复 §1.5/§1.6/§5,清除外部回写损坏
...
外部工具于 14:04 把本文档回写为旧稿:§1.5/§1.6/§5 丢失、
§10 混入 66 组下划线标签、表格被填充对齐;该旧稿被 aac5f99
一并提交,成为该文件的首次入库内容。
本次按权威来源重建:§1.5 B0 产品定义、§1.6 B0-c 本期范围
(定论 = 骨架全做 + 有效通道子集闭环)、补齐 §5 定值参数模型;
清除全部下划线标签、表格压回仓库紧凑风格;同步 §1.3/§3.3/
§6.4/§7.1/§7.2/§7.3/§9 R1/§10.3。
2026-10-10 14:12:08 +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
5c978465c9
TPAFE驱动闭环E-44/E-45/E-58取数契约,固化E-59门禁,adc_task挂进Keil工程
2026-10-10 03:46:50 +08:00
wandering1
66b6cdf425
登记 N-18:8 路电气量分属两片转换器属 V0.1 硬件缺陷,V0.2 改版须全接 TPAFE,撤销旧有意分配口径
2026-10-10 03:24:10 +08:00
wandering1
61a6061950
串口助手补残行封顶与会话边界复位、截头按行对齐、open 保持 dtr/rts;判定加命中行/顺序/耗时/JSON 与产物清理
2026-10-10 03:17:16 +08:00
wandering1
fccf99bc90
测试闭环补固件身份戳、烧录回读校验与启动锚点计数,并修cmd引号解析与flash-cmd预检缺陷
2026-10-10 02:54:33 +08:00
wandering1
b37fdea21b
修复串口助手6处采集缺陷:wait-idle no_data与首字节门、log先过滤后截尾、HTTP独占绑定修正、超时不再误拉daemon、配置BOM容错
2026-10-10 02:33:44 +08:00
wandering1
29df7bf8fb
4 个 Fault Handler 迁入 USER CODE BEGIN 0(L3→L2):生成区恢复 CubeMX 原样,重生成零 diff
CI / L0 静态门禁 (pre-commit) (push) Has been cancelled
CI / L0.5 主机侧单测 (MSVC) (push) Has been cancelled
2026-10-10 02:02:58 +08:00
wandering1
e2e1d0fd42
IWDG 延后启动改走宏改名(L3→L2):生成调用变空操作,重生成后不再需要手工删
2026-10-10 01:30:47 +08:00
wandering1
63ee090fd1
行尾策略写死进 .gitattributes(统一 LF、bat 强制 CRLF、二进制显式标注),根治重生成后的行尾幻影改动
2026-10-10 01:15:16 +08:00
wandering1
53bd9af02e
对齐 CubeMX 输出:提交第三方与生成文件的文件末尾空行(85 文件,零逻辑变化)
2026-10-10 01:05:15 +08:00
wandering1
5eed2151de
CubeMX 生成 ADC1(9 通道)+ 复原重生成定制,FreeRTOS 加固迁 L1、钩子落 USER CODE 4/5,门禁豁免生成文件空白改写
2026-10-10 00:53:20 +08:00
wandering1
718d399f70
net_drain_chip_rx 补实测注释:scratch 静态化反亏,勿再"优化"
...
ARMCC 把 256B 分块 scratch 与同函数内不重叠的 192B 日志缓冲叠放
实测静态化只省 ~16B 栈、反增 256B BSS,已回退并留注释防重复尝试
2026-10-09 17:17:48 +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
ed463716f6
netTask 栈 1024→960:按静态最坏链核算并同步 .ioc/README/审计基线
...
静态最坏链 2664B(日志主导:链上 5 帧各含 192B __con_line + 尾部 696B)
3840B 配置下余量 1176B(30.6%),过 stack_report 规则
net_drain_chip_rx scratch 静态化实测仅省 16B 栈、反增 256B BSS,已回退
.ioc FREERTOS.Tasks01 同步 960(L1 记账,重生成不丢)
2026-10-09 17:14:52 +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
ad0fd53389
阶段 D 收口:P3 卫生六项 + S-2 boot_log 存档流程 + 登记簿销项
...
阶段 D(验证与卫生)离线可完成项收口;台架依赖项 D2/D5/D6 保留登记。
- D4 P3 卫生六项:
- P3-1 cfg_file.c s_encode:STR 型 len==0 回绕(p_key->len - 1u)直接拒绝
- P3-2 cfg_file_store_mcu.c:原子写临时名由 p_path 同目录推导(s_build_tmp_path)
- P3-4 rs485.c:模块描述订正为实际实现(HAL_Delay(1),非 DWT µs)
- P3-6 ch395f_get_socket_status:补 p_status NULL 检查
- P3-8 build.md:退出码契约订正为 0/1/2 三档
- P3-11 adc_task/rs485_task:注明"预留桩(未启用)"
- D3 S-2:新增 docs/测试说明/boot_log_data/(快照存档目录 + 流程),
并在 测试开发标准流程.md §7.3 登记沉淀约定
- 登记簿销项:删 P3-1/2/4/6/8/11、S-2;阶段 D 表移除 D3/D4;
§1 计数更新(P3 6→0、登记簿 10→9);§3 章节重排
(登记簿→§3.2、专项→§3.3);清理 App/cfg/README.md 等对已销编号的引用
- 同步刷新内存快照:Flash 266,632 B / ROM 合计 267,372 B
验证:@build 0 错 0 警;cfg_file 主机单测 149/149;
pre-commit --all-files 17/17 通过。
2026-10-05 10:15:53 +08:00
wandering1
de1b50efe9
修复 P1-7:MAC 写入顺序改为 INIT_CH395 之前
...
- 手册 §9.2.1:SET_MAC(步骤①) 必须先于 INIT_CH395(步骤⑤);SET_MAC 写
芯片 EEPROM,INIT 从中加载 MAC——原顺序反了则本次上电 MAC 不生效
(回落芯片内置/上次值),UI 显示与设备在线身份不符
- net_socket.c net_init():SET_MAC 移到 ch395f_init() 之前(对齐步骤①)
- ch395f.c:四个 SET(MAC/IP/GWIP/MASK)限定条件注释由"芯片已初始化"
订正为"必须在 ch395f_init() 之前调用"
- net_socket.h / BSD_Socket_API_函数调用关系.md:同步顺序描述
- CH395F_Trap_Records.md:新增 Trap 24 沉淀根因与修复
- 待处理内容.md:P1-7 销项(§1/§2 阶段 A/§3.1/§4);阶段 A 清空后重编号
- 验证:Keil 构建 0 错 0 警;pre-commit 17/17 全通过
2026-10-04 23:07:00 +08:00
wandering1
72c0bd2f7c
docs(待处理): 删除已闭环条目并重组登记簿结构
...
- 删除已完成内容:§1 的 P0/P2 行、§3.1 的 P1-8 已闭环 stub、
§3.2 的 P2 销项索引表与"已销项 P2"列表、§3.3 的"已销项 P3"列表、
§4 的 P0-1 已闭环说明段
- 重组:§3 重编号(P3→3.2、登记簿→3.3、测试与架构专项→3.4,
子节 3.4.1~3.4.4);§8 维护约定的章节引用同步
- 同步清理失效编号引用(P2-12/P1-8);实机测试实施指南溯源表
的 P1-8 上游改为"原台账项,已闭环"
- pre-commit 全通过(doc-links 等)
2026-10-04 22:32:42 +08:00
wandering1
e0b02d397c
修复 P2 全部 10 项:错误传播/竞态/门控/文档失真
...
待办池 docs/待处理内容.md §3.2 的 10 个 P2 全部闭环;逐项落代码 + 注释说明。
P2-1 cfg_file: 受管键行超 CFG_LINE_TEST_MAX 拒绝保存(防重复键行)
P2-2 ch395f: DMA 失败传播状态 + 锁存通道故障 + 读不拷不可信数据
P2-7 net_select: LISTENING 不再恒判可读(消除 select 忙轮询地雷)
P2-8 time_sync: 核实 L3 pending 改写已闭环(net_recv_to 分片 + 总预算)
P2-9 sys_log: 挂载改幂等 + 卷锁,defaultTask 2s 重试建 /log
P2-10 sys_log: s_read_raw 纳入卷锁 try(读者/写者 unlink 互斥)
P2-11 net_task: RECONFIG 改 osEventFlagsWait 原子取走 + 清除
P2-12 app_cfg: APP_*_ENABLE 如实标注为未接线占位,删“开关”说法
P2-13 freertos: 产品构建 vTaskDelete(testTask) 回收 8KB CCM 栈
P2-15 download.bat: 先删旧日志 + 增“未产出日志”判定
P2-13 用 USER CODE 区回收而非生成区 #if 门控:生成区改动会被 CubeMX
重生成覆盖,本方案重生成不丢。P2-12 因产品定义 B0 未定、APP_NET_ENABLE
无单一接线点,按修复建议备选(删“开关”说法)处理。
验证:@build 0 错 0 警;主机单测 watchdog 39/39 + sys_clock 100/100 +
cfg_file 149/149(新增 TC-CFG-044);pre-commit --all-files 17/17。
2026-10-04 08:30:30 +08:00
wandering1
13eeba944b
docs: P0-1 真机 @test 收口(§4.1 待验证清空)
...
对 docs/待处理内容.md §4.1「待验证」唯一未闭环项 P0-1 做真机验证并收口:
- @build 0/0(增量;已确认无 C 源文件新于镜像)
- @test VERDICT PASS(rc=0):[CFG] load: OK (523B, heap free 8840B)
+ Forbidden FAIL/ERROR/HardFault/[ERR] 零命中
+ selftest: no fault record(先清掉 2026-10-02/03 注入窗口遗留 67 条)
- ST-LINK 全片回读 No difference found(0x08000000~0x08040F9B)
文档收口:
- 待处理内容.md:§4.1 清空 → §4 改「待确认」;§1 P0 行改为已闭环
- 配置文件设计说明.md:增 2026-10-04 复跑记录行(证据沉淀)
- 项目审查与优化建议报告.md:三处「真机确认待执行」改为已 PASS
- 实机测试实施指南.md:A1 行补 2026-10-04 记录
pre-commit 17/17 Passed。
2026-10-04 08:04:34 +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
5955ac010d
测试与架构改进建议 2026-10-04 状态更新:S1~S14 落地复核与体系计数刷新
...
- 全量复核 S1~S14 落地情况并就地标注:已落地 12 条,待做 S12
- 体系计数刷新:L0.5 模块 1→3(看门狗/sys_clock/cfg_file)
- L0 钩子 15→18、板端套件 4→5、CI 已补产物存档与汇总行
- §0.1/§0.3/§1.1/§1.2/§1.3 T-1~T-5 同步更新
- §2.2~§2.8、§3.1~§3.7、§4.1~§4.7、§5.1/§5.2、§6 同步更新
- 修正交叉引用整体错位:T-3/T-4/T-5 与 A-1/A-3/A-5/A-6/A-7 各偏一节
- §2.6 同步 2026-10-04 重采数据:min_ever=4,728 B
- 上游 S-1 升级为 defaultTask 3664/4096(余量约 10%)
- 变更记录补 2026-10-03 台架窗口条目(S4/S5/S7/S9/S11)
2026-10-04 02:05:39 +08:00