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 |
|
wandering1
|
1098fbd952
|
错误码传播审计:订正计数与索引——未闭环 25→17、已闭环 33→41,同步 E-34/E-04/GD5F族/E-60 闭环;§0 结论速览、§2 索引、§3 分类计数、§4 矩阵与文末订正记录
|
2026-10-04 01:59:44 +08:00 |
|
wandering1
|
7531eb9b89
|
待处理内容(登记簿):删除已闭环项,只保留未闭环项
按用户要求(与 下一步任务规划.md 同一要求),登记簿只保留未闭环项:
- 删 S-6(dhara resume 回滚,✅ 已修)。
- 删「可靠性与自恢复」整节(N-03/N-03a/c/d/e 均 ✅;N-03b 为已接受的显式代价,非待办)。
- 删「测试与验证基础设施」的「已销项 T-1~T-6」块与空表。
- N-2 行精简(去掉验证叙事,保留结论 + 残余待办)。
- 新增 T-7:CI runner 未就绪(部署前置,原为区块内提示,改登记为正式待办)。
- 抬头补一句「本表只保留未闭环项,已闭环项不保留、不留变更记录」。
按登记簿「同步清理其他文档对本编号的引用」约定,修正悬空指针:
- 看门狗设计说明.md:抬头状态(原「待台架验证」已过时 → ✅ 已闭环,去掉 N-03 指针);
§后续项去掉 N-03 指针。
- 实机测试实施指南.md:§4 来源去掉 N-03;§10 V2/V4/V5 下游改为设计说明变更记录。
- 看门狗单元测试说明.md:分工表两处「⏳ 待台架(N-03 V2/V4/V5)」→ ✅ 已台架验收。
(历史变更记录中「T-6/T-1 销项」等属当时记录,保留不改。)
验证:pre-commit --all-files 17/17 Passed。
|
2026-10-04 01:48:50 +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
|
8947f8ac4d
|
下一步任务规划 2026-10-04 更新:阶段A闭环 + 状态全量同步 + 栈基线重采
盘点同步(§1/§2/§3/§4):
- 阶段 A A1~A4 全部真机验证通过(A1 P0-1 @test PASS;A2/A3/A4 正常路径零回归)
→ §1.2 P0 归零、P1 由 4 → 2(P1-8/P1-10 闭环)、阶段 A 表标 ✅(A5 P1-7 待手册)。
- §1.1 增补 2026-10-02/03 已闭环域:IWDG 看门狗(N-03 V2/V4/V5 台架验收)、
存储侧 dhara resume 修复(S-6)+ ORE 僵尸通道自愈 + 卷锁、GD5F 错误通道族、
E-34/E-04、堆低水位告警(S11)、测试架构 T-1~T-6 + S5/S4、RTC 套件汇总行。
- §1.2 登记簿 5 → 10(补 N-16/N-17/S-3/S-4/S-5;N-2 降级低风险观察项)。
- §2 阶段 B 标注为当前最高优先级;阶段 C 增 C6(USART1 TX-only 根治)、
C3 改写(N-2 降级 + S-3)、C4 升级;阶段 D 增 D5(N-16)/D6(N-17)、D1 标 ✅。
- §4 诊断基线重采:Flash 266,676 B、RW_IRAM1 84,960 B、堆 min_ever 4,728 B、
各任务运行时栈水位。§5 增变更记录。
栈基线重采(重要发现):产品构建(suite=NONE)V5 30 min 负载实测
defaultTask 峰值 3664B/4096(余量 432B ≈ 10%,已低于 30% 判据)——较 09-21 基线
2136B / 09-22 的 2872B 持续上升(A2/A3/A4 + IWDG + 卷锁 + 堆告警入链)。
→ 待处理内容.md S-1 升级为"需尽快处理";RAM使用分析与优化方案.md 标注 §2.3
栈表已过时 + 修正 §0 当前状态描述。
验证:pre-commit --all-files 17/17 Passed;run_all_suites.py --check-build 四套件全编译通过。
|
2026-10-04 01:38:52 +08:00 |
|
wandering1
|
029437be89
|
台架执行《实机测试实施指南》步骤 3~7 并闭环
步骤 3/4(IWDG V2/V4/V5 + 堆低水位 S11):
- V2 任务饿死 stall 后 ≤2.5s IWDG 复位;V4 关中断死循环 ~4.9s 稳定复位;
V5 30min 120×FTP 全 PASS、零 IWDG 复位。堆告警全程未触发(min_ever=4728B)。
- task_watchdog.c:stall 证据写盘会经 nand_ftl_wd_feed 喂狗 → 增 s_stall_evidenced
每次 stall 仅取一次证据,避免"取证据"本身阻止复位。
- default_task.c:堆低水位告警(HEAP_LOW_WATER_B=3072)。
步骤 5(GD5F 错误通道 S9):gd5f2gq5ue.c/.h + nand_ftl.c 错误码统一为 int32_t 并
全量检查返回值;套件回归 16/16 PASSED。
- test/run_all_suites.py:--forbidden 改为按套件覆盖(GD5F 用 "HardFault;assert")——
TC-GD5F-704 故意触发 [ERR] 回落轮询,统一默认值会误判 FAIL。
步骤 6(网络稳定性):7.1 正常路径 ✅(V5 证据);7.2 N-2 丢弃可观测性代码已具备、
49s 静默在 V5 未复现(降级低风险观察项);7.3 N-3 待 PC peer。
步骤 7(工程卫生):
- S5:新增 test-cppcheck 钩子(仅 warning,排除模拟器桩)。
- S4:新增 scripts/check_test_traceability.py(默认仅告警)。
- 待核实项 TEST_SUITE_SELECTED 实机核实 = 死代码(无使用点);RTC 套件实际正常执行,
真缺口 = 缺套件级汇总行 → sd2506_test_task.c 补 === RTC Tests: N/M PASSED === 并
修正 Phase 级汇总累计问题;test_config.h 补齐 RTC 并注释"当前无引用"。
验证:产品 @build 0/0;pre-commit --all-files 17/17 Passed;
run_all_suites.py --suites RTC → PASS。
文档:实机测试实施指南 / SD2506_Test_Guide / 待处理内容 / 测试与架构改进建议 同步。
|
2026-10-04 00:35:06 +08:00 |
|
wandering1
|
aef1d92b3f
|
实机测试实施指南重构为纯执行流程:步骤1~7+状态标记,已完成事项(S7/A1~A4)细节与证据移出至各模块文档,§1改执行流程总览,外部引用同步
|
2026-10-03 22:45:19 +08:00 |
|
wandering1
|
a7af1c9333
|
实机测试实施指南变更记录去"待上板"残留:历史文档改造条目 §3 描述改 A1~A4 项,全库无待上板框架残留
|
2026-10-03 22:31:59 +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
|
1780e5320b
|
实施A2/A3/A4并通过真机验证:net_task失败重试自检、ch395f有限超时故障锁存、remo_send短写阻断;@test 7/7,A1含配置持久化闭环
|
2026-10-03 09:05:57 +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
|
554b2e88da
|
方案文档改造为机制说明:删除规划/盘点/阶段/风险/任务拆分章节,保留变量清单/解析语义/配置方法/验收判据,外部引用同步重编号
|
2026-10-02 23:21:25 +08:00 |
|
wandering1
|
bf025e6f10
|
模拟器构建修复:CMakeLists配置引擎引用同步至App/cfg/与test/board/(重构遗留),--cfgtest四场景PASS,跨机验证清单⑤行更新
|
2026-10-02 23:09:53 +08:00 |
|
wandering1
|
c441131db6
|
环境文档小修:CMSIS pack 更正为非必装(keil.com 已下架)、串口配置源端口更正为 COM6
|
2026-10-02 22:56:48 +08:00 |
|
wandering1
|
401908c062
|
环境文档增补跨机验证清单:项目部署环境要求新增§2.12(变量配置+六步验证链+反向fail-fast测试+通过判定),方案文档待办项交叉引用
CI / L0 静态门禁 (pre-commit) (push) Failing after 25s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 29s
|
2026-10-02 22:29:49 +08:00 |
|
wandering1
|
33a4aa4945
|
本地工具路径DTU_*环境变量改造落地:10处调用点去硬编码+变量优先解析,本机全链路验证通过,文档同步收口,requirements补pre-commit
|
2026-10-02 22:14:49 +08:00 |
|
wandering1
|
b96d649e62
|
文档销项:登记ORE僵尸根治与卷锁待办,补存储架构resume锚点说明
CI / L0 静态门禁 (pre-commit) (push) Successful in 57s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 25s
|
2026-10-02 20:54:05 +08:00 |
|
wandering1
|
930215f81a
|
修复IWDG超时未配置与dhara resume回滚:看门狗误复位与复位后写入全部丢失,台架全量自检PASS
|
2026-10-02 20:48:30 +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 |
|
wandering1
|
fe963e7d91
|
测试:新增 cfg_file 主机侧单测并修复外科手术保存死码缺陷(S1-b+S2)
CI / L0 静态门禁 (pre-commit) (push) Successful in 49s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 17s
|
2026-10-02 13:00:54 +08:00 |
|
wandering1
|
f3befaed08
|
CI:补产物存档与结果汇总,明示体积门禁盲区(S3+S14)
CI / L0 静态门禁 (pre-commit) (push) Successful in 58s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 19s
|
2026-10-02 11:55:31 +08:00 |
|
wandering1
|
fac9d1c409
|
测试:新增 sys_clock 主机侧单测并修复 Zeller 星期缺陷
|
2026-10-02 11:40:35 +08:00 |
|
wandering1
|
9f52731ed8
|
文档:补 Runner 部署指南 §5.1.1/§5.1.2 与排障表(CI 首次全绿)
|
2026-10-02 01:54:14 +08:00 |
|
wandering1
|
1020f6d26c
|
文档:修正串口助手 state 运行时文件引用被 CI doc-links 误报
|
2026-10-02 01:49:35 +08:00 |
|
wandering1
|
3a90557078
|
文档:补 LastTaskResult 数值解读与健康判据
CI / L0 静态门禁 (pre-commit) (push) Failing after 22s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 16s
部署实测通过后补充:LastTaskResult 267009(0x41301) 是
SCHED_S_TASK_RUNNING(任务正在运行),并非错误,常驻任务常态值。
补 0/267011/267014 释义,并给出判断 runner 健康的三个真正指标
(进程存活 / declare successfully / Gitea 显示 Idle)。
|
2026-10-02 01:05:07 +08:00 |
|
wandering1
|
164fd3ec23
|
文档:修正 Runner 常驻方案为任务计划程序
实测确认 gitea-runner v4.0.1 的 daemon 是纯控制台程序,不含任何
Windows 服务管理代码(命令集仅 bug-report/cache-server/config/
daemon/exec/register,无 service.go),用 sc.exe 注册服务后
Start-Service 必然报错 1053。二进制内出现的 OpenSCManagerW/
CreateServiceW 等符号来自 Docker SDK,与服务安装无关。
- Gitea_Runner部署指南 §4 全节重写为任务计划程序方案:新增 §4.0
根因分析、§4.2 一键脚本 deploy_runner_task.ps1、§4.3 手动命令
(含 72h ExecutionTimeLimit 警示)、§4.5 清理遗留服务、§4.6 提权
- 排障表补错误 1053 / LastTaskResult 非 0 / 72 小时被杀 3 条
- 拓扑图、§5.1 PATH 运行账户、§7 日志位置、§10 TL;DR 同步更新
|
2026-10-02 01:01:11 +08:00 |
|
wandering1
|
018ee9527e
|
文档:补脚本编码坑(.ps1 需 UTF-8 BOM)
实测:无 BOM 的 UTF-8 .ps1 被 WinPS 5.1 按 GBK 解读,中文变乱码且撞坏引号配对,
报"源文本中包含无法识别的标记"/"字符串缺少终止符",报错行号无规律易误判为逻辑问题。
新增 §7.1:修法(重存为 UTF8BOM / 前缀 BOM 字节)+ 解析器语法校验命令;
排障表补该条目;三个配套脚本已统一加 BOM 并通过解析校验。
|
2026-10-02 00:45:34 +08:00 |
|
wandering1
|
c4768e98e3
|
文档:按 v4.0.1 实测修正 Gitea Runner 部署指南
实测发现 act_runner 已更名为 gitea-runner,发布页迁至 gitea.com/gitea/runner,
当前最新 v4.0.1,且 v4 移除了 daemon install/start/stop/status 子命令。
修正内容:
- §1 改为 gitea-runner v4.0.1 下载地址与文件名;新增 §1.3 命令集对照
- §3 修正 log 段(v4 无 file 键,改用 log.job.dir)+ config 子命令用法
- §4.2 常驻改用 sc.exe / New-Service(v4 无 daemon install)
- 新增 §4.5 提权硬约束(IsAdmin=False 时 New-Service 拒绝访问)
- 新增 §6.1 MySQL 直查核验 runner 在线状态
- 排障表补 4 条(accepts at most 0 arg / unknown config key / 拒绝访问 / WorkingDirectory)
- §10 TL;DR 与配套脚本清单同步
|
2026-10-02 00:39:51 +08:00 |
|
wandering1
|
c305a8dd20
|
文档:新增 Gitea Runner 部署指南(本机原生环境定制)
针对实测环境定制:Gitea 1.25.4 为 Windows 原生 gitea.exe(非 Docker)、
以服务运行、监听 0.0.0.0:3001、[actions] ENABLED=true 已开启。
覆盖 Runner 端全流程:下载 act_runner / register(--instance 用 127.0.0.1:3001 回环、
--labels "windows:host" 必须精确匹配 runs-on)/ config.yaml / daemon install 常驻 /
软件与 PATH 服务账号坑 / MSVC 标准路径约束 / 内网 action 零依赖改法 / 排障表。
附 check_env.ps1 一键环境自检脚本(落位 D:/Docker/act_runner/)。
关联更新:项目部署环境要求 §七 + 变更记录、测试开发标准流程 §9.4 + 关联文档表。
验证:check_doc_links --all 107 文档通过;本机工具链 Python/cppcheck/pre-commit/MSVC 四项全齐。
|
2026-10-02 00:29:45 +08:00 |
|
wandering1
|
52e6dcb009
|
文档:修正 CI 配置指南中 DEFAULT_ACTIONS_URL 说明
原 §1.2 示例把 DEFAULT_ACTIONS_URL 写成 https://gitea.com,易误导为该填自己的网址。
实际语义:它控制 action(如 actions/checkout@v4)的下载源——默认 github.com,
self = 从自己 Gitea 实例拉(需先把 action 镜像进实例),并非填实例域名。
新增 §1.2.1 专节(取值表 + 按网络环境选择 + 官方 FAQ 原文引用);
§4.3 同步修正(原文误写"gitea.com 代理"),并把零依赖 git 写法列为内网首选。
|
2026-10-02 00:12:15 +08:00 |
|
wandering1
|
1e01950b23
|
文档:新增 CI 配置指南(Gitea Actions 全流程)
新增 docs/环境与部署/CI配置指南.md:服务端 [actions] ENABLED 开关、
Windows runner(act_runner)注册(--labels "windows:host" 必须与 runs-on 对应)、
runner 软件环境与 PATH 要求(含 MSVC VS_ROOTS 路径约束)、workflow 位置与触发、
内网拉不到 actions/checkout 的三种处置、端到端验证清单、故障排查表、日常维护。
关联更新:项目部署环境要求 §七(相关文档 + 变更记录)、
测试开发标准流程 §9.4(指向配置指南)+ 关联文档表。
验证:check_doc_links --all 106 文档通过;scripts/ci_local.py rc=0(L0 + L0.5 全过)。
|
2026-10-01 23:59:28 +08:00 |
|
wandering1
|
e90486524d
|
CI:Gitea Actions 落地 L0+L0.5(补 T-6)
新增 .gitea/workflows/ci.yml:push/PR 触发两个 Windows job——
l0-gates 跑 pre-commit --all-files(无 Keil .map 时自适应跳过 mem-numbers),
l05-host-unit-tests 遍历 test/host/**/run_unit_test.py(缺 MSVC 则告警降级跳过)。
刻意不跑 @build(需 Keil 授权);L1/L2/L3 需真机+ST-LINK,不上 CI。
新增 scripts/ci_local.py:本地跑与 CI 等价的门禁(自动选用装了 pre-commit
的解释器;.map 自适应;退出码 0/1/2 与 CI 对齐),供提交前自查与 runner 就绪前过渡。
文档同步:测试开发标准流程 §9(CI 章节)/§1/§4.1、待处理内容 T-6 销项、
项目部署环境要求 §2.11(runner 前置)、pre-commit 使用说明 §1、scripts/README.md、AGENTS.md。
验证:scripts/ci_local.py rc=0(L0 14 钩子全过 + L0.5 39/39)。
|
2026-10-01 10:19:38 +08:00 |
|
wandering1
|
2055de0303
|
测试:落地测试架构改进 T-1~T-5(套件开关门禁/汇总行校验/通用 harness/公共断言宏/多套件编排)
背景:L0.5 主机侧单测落地后复审测试架构,给出 6 条改进意见(P0~P3),
登记进 docs/待处理内容.md「测试与验证基础设施」后逐条实施。
- T-1(P0) 测试套件开关门禁:新增 scripts/check_test_suite.py + pre-commit 钩子
test-suite-switch,默认要求产品构建(全部 TEST_SUITE_* 注释),跑套件回归用
--allow-test-build / ALLOW_TEST_BUILD=1 显式放行。顺带把 test_config.h 中长期
开启的 TEST_SUITE_CH395F 改回注释(仓库此前躺着的是测试固件)。
- T-2(P1) verify_log.py 增加 --require-suite-summary:要求
"=== <名称>: N/M PASSED (failed=0) ===" 且 N>0,堵住"套件没跑到汇总行/
断言数为 0 仍判 PASS"的盲区;run_boot_test.py 同名参数透传。不传参向后兼容。
- T-3(P1) 抽取通用 harness test/host/common/unit_test_harness.py(工具链探测/
INCLUDE-LIB 拼接/wd4819/GBK 解码/退出码契约);watchdog 运行器 170→55 行,只声明 TestBuild。
- T-4(P2) 新增 test/board/test_common.h 集中断言内核(TEST_CHECK_IMPL/TEST_REPORT_IMPL),
4 套件各用一行宏绑定自身统计变量(保持 g_xxx_stats 独立、防跨套件串数)。
刻意不 include dbg_log.h——否则冻结 DBG_TAG 默认值触发 #47-D 重定义警告。
- T-5(P2) 新增 test/run_all_suites.py 多套件回归编排,try/finally 无条件还原套件开关。
验证:@build 产品构建 0 错 0 警;4 套件逐一构建均 0/0;看门狗单测 39/39 PASS;
pre-commit 14 钩子全通过;编排脚本 dry-run/开关切换/异常还原均实测通过。
|
2026-10-01 07:28:57 +08:00 |
|
wandering1
|
6b90fa0581
|
文档:补充主机侧单元测试(L0.5)的环境要求
新增 L0.5 主机侧单测需 MSVC(cl.exe)离线编译真实源码,此前环境
文档未覆盖该依赖。本次补齐环境侧全部引用点:
- 项目部署环境要求.md:
· §2.3 由"PC 模拟器环境"扩为"PC 侧编译环境(模拟器 + 主机侧单元
测试)",明确同一套 VS 的 cl.exe 同时服务两者,MSVC 由"仅模拟器
需要"升级为"提交门禁需要"
· §2.7 pre-commit 表补 watchdog-unit-test 钩子 + "未装 VS 会被拦截"
· 总览拓扑图加 MSVC 节点;第 3 步 / 第 10 步冒烟 / 搭建清单 /
§2.10 下载表(补 VS2022/2026)/ 速查表(补 cl.exe 缺失、
C1083 stdio.h 两条)/ 相关文档 / 变更记录同步
- 测试开发标准流程.md:
· §4.2 补 L0.5 环境要求表(cl.exe / SDK / 纯标准库 Python / 缺失时
退出码 2 且钩子拦截)+ "不调 vcvars64.bat(reg.exe 受限)"原因
· §4.1 工具清单标注该运行器需 VS
|
2026-10-01 07:03:53 +08:00 |
|
wandering1
|
73941da6b1
|
看门狗判定状态机增加主机侧单元测试(L0.5 层)
为 task_watchdog.c 的判定逻辑(位图取走清零 / 必需掩码 0x37 判定 /
miss_streak 连续 8 次停喂 / 100ms 抽样节流 / tick 回绕安全)补一层
主机侧纯逻辑单元测试,弥补此前只能靠真机或模拟器才能发现回归的空白。
架构(沿用项目既有"共享核心 + 平台后端"做法,参照 cfg_file_store):
- task_watchdog.h 末段新增"平台后端(内部)"声明 3 个钩子
(wd_platform_feed / _start / _tick_ms),MCU 端以 __weak 提供默认实现,
行为与重构前逐字一致(@build 0 错误 0 警告,Flash +20B)。
- 主机侧单测以同名强符号覆盖三钩子,即可离线注入/观测,无需碰 MCU 代码。
- 测试文件 #include 生产源文件本身,保证测的是真代码而非副本。
- 测试专用复位 task_wd_test_reset() 仅 TASK_WATCHDOG_UNIT_TEST 下编入,
MCU 构建零代码零符号。
测试(test/host/watchdog/,MSVC 离线编译,纯标准库驱动):
- 39 项断言全过(退出码 0);注入故障可复现退出码 1。
- run_unit_test.py 直接拼 INCLUDE/LIB 调 cl.exe,绕开本机被禁的 reg.exe。
- stub/ 三桩头覆盖 main.h / iwdg.h / dbg_log.h。
门禁:pre-commit 新增 watchdog-unit-test 本地钩子(L0.5 层),仅被测文件
或其测试变动时触发;测试开发标准流程.md 新增 L0.5 层说明。
顺带改善:task_watchdog.c 的节流基线 s_last_tick 由函数内 static 提为文件
static(可测性 + 模块状态归一)。
|
2026-10-01 06:57:01 +08:00 |
|
wandering1
|
0ac68605dd
|
看门狗 §3.2 流程图重绘为 SVG:任务置位→校验者判定→喂狗 + 时间轴
|
2026-10-01 06:35:57 +08:00 |
|
wandering1
|
2d414f8aa9
|
查证 SHCSR 的 Fault 使能位无法在 CubeMX 配置,补入文档与审计提示
用户问 fault_handler_enable() 能否通过 CubeMX 配置。查 CubeMX 安装目录的
模板源码后确认:不能。三重证据:
1. tpl_main_c.ftl 的 MX_NVIC_Init() 用 [#if vector.systemHandler=="false"]
才生成 HAL_NVIC_EnableIRQ;而 NVIC-STM32F417_Modes.xml 里
MemoryManagement/BusFault/UsageFault_IRQn 都标 Y(=systemHandler),
故 CubeMX 对这三个永不生成使能代码(只生成优先级,且仅当优先级 != 0)。
2. 全部模板中 SHCSR 只出现 1 次(tpl_main_c.ftl:2269),且是 MPU 清理时的
SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk(禁用),无任何 |= 置位。
3. MPU 路径也堵死:.ioc 的 Mcu.IP 列表无 MPU,且 HAL_MPU_Enable 只置
MEMFAULTENA 一位,BUSFAULTENA/USGFAULTENA 仍拿不到。
实测印证:Src/stm32f4xx_hal_msp.c 的 HAL_MspInit() 里只有
HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0),三个 Fault 一行代码都没生成。
结论:只能手工写。但函数体在 USER CODE BEGIN 1 区(L2),重生成不会丢,
另有审计项 fault-handler-enable 兜底 -- 故这不是风险,只是无法享受 L1。
顺带记录一个易踩的误解:.ioc 里 NVIC.MemoryManagement_IRQn=true 的第 1 段
只是"向量在 NVIC 表里可见/已配优先级",与 SHCSR 使能位无关,
不要以为勾了 NVIC 面板的 Enabled 就等于使能了故障。
改动:
- 看门狗设计说明.md:§10.2 新增"为什么 fault_handler_enable() 写不进 .ioc"
(三路径对照表 + 实测印证 + 结论);四个 Fault 采集小节加警示;
L1 表格补该行;变更记录新增 2026-10-01 条。
- AGENTS.md:新增"SHCSR 的 Fault 使能位无法在 CubeMX 配置"铁律条目。
- scripts/check_cubemx_survival.py:fault-handler-enable 的 hint 补上
"无法 CubeMX 配置"及其原因,便于日后重生成后看提示就能回忆。
验证:pre-commit 13 钩子全通过;审计 18 通过 / 1 警告 / 0 失败。本次仅改
文档与脚本注释,未动代码,无需重编译。
|
2026-10-01 06:20:50 +08:00 |
|
wandering1
|
8a18e388c7
|
四个 Fault 全部采集现场:MemManage/BusFault/UsageFault 由空死循环升级
原状:HardFault 已有崩溃采集,但 MemManage / BusFault / UsageFault 仍是空
while(1) —— 这三类故障发生时日志完全静默,且因 SHCSR 默认未使能,实际会
被升级成 HardFault,报告出笼统的 "HARDFAULT"、看不出根因。
改动:
- Src/stm32f4xx_it.c:三个 Handler 升级为手工 __asm 版(取 MSP/PSP 帧指针)
-> B 到 per-fault C 入口 fault_entry_{mem,bus,usage} -> hard_fault_report()。
hard_fault_report 增加 tag 参数,日志统一为
"[ERR] <TAG> PC=.. LR=.. xPSR=.. R0-R3=.. CFSR=.. HFSR=..[/BFAR][/MMFAR]"。
生成实体经 #define X X_Gen 改名保留,链接器各移除 2 字节(.map 已验)。
三个各带独立锚点 MEMFAULT/BUSFAULT/USAGEFAULT-ANCHOR。
- 新增 fault_handler_enable()(USER CODE BEGIN 1 区):使能 SHCSR 的
MEMFAULTENA/BUSFAULTENA/USGFAULTENA。声明入 Inc/stm32f4xx_it.h,调用在
app_main_init() 第一行(纯寄存器写,不依赖日志/时钟)。
- 刻意不启用 CCR.UNALIGN_TRP / CCR.DIV_0_TRP:会把普通 bug 升级成死机,
对本项目弊大于利(说明写进函数注释)。
实现约束(本轮踩坑):ARMCC 的 __asm 块取不到 C 的数据符号(ADR r1, xxx_tag
报 A1516E: Bad symbol,去 static 也无效),也无法给 C 函数传字符串参数,
故故障名必须由 C 侧 per-fault 入口带上。
配套:
- check_cubemx_survival.py:新增 fault-handlers-3 / fault-handler-enable 两项,
UNPROTECTED_LEGACY 清掉三个 Fault(WARN 2->1),清单 16 -> 18 项。
- AGENTS.md:新增"4 个 Fault 全部采集"条目;ARMCC 汇编条目补 A1516E 第 3 坑;
校验标记补 [ERR](四个 Fault 日志都以它开头 -> 一律判 FAIL,刻意)。
- 看门狗设计说明.md:§6.1 补 4 条 Fault 标记与 @test 禁项关系;
§10.2 L3 清单与四个 Fault 采集小节;§11 结论表与变更记录。
- 待处理内容.md:新增 N-03d(已完成),N-03c 补第二次重生成结论。
验证:@build 0 错误 0 警告(Flash +156 B,RAM 无变化);pre-commit 13 钩子
全通过;审计 18 通过 / 1 警告 / 0 失败。
|
2026-09-29 09:16:19 +08:00 |
|
wandering1
|
67d26ac37a
|
修正 CubeMX 重生成防丢失机制:审计脚本实测有效,恢复 5 处被覆盖定制
第二次重生成验证了审计机制,并证伪了上一轮的一处假设:
- 审计脚本 check_cubemx_survival.py 准确检出全部 5 处覆盖(16 项中 5 FAIL),
机制有效;Src/main.c 复位原因锁存(USER CODE BEGIN Init 区)完好,
是"USER CODE 区有效"的正向证据。
- 关键发现:CubeMX 本次换了一代中断函数模板(旧 HardFault_Handler /
HardFault_Report 自造区 → 新函数体内 HardFault_IRQn 0 / W1_HardFault_IRQn 0),
"生成区之外的自造标记区"同样不被保留,旧假设被证伪。
恢复方案(第二次升级):
- stm32f4xx_it.c:报告实现迁入 USER CODE BEGIN 0(区名从未变过的标准保护位);
Handler 本体改为生成区整函数替换,用 #define HardFault_Handler
HardFault_Handler_Gen 把生成实体改名保留,链接器自动移除(.map 实证
Removing ... (2 bytes)),向量表指向手工 __asm 版(0x080001a1,18 字节)。
- iwdg.c:去掉 HAL_IWDG_Init() 调用,补 IWDG-DEFER-START-ANCHOR 锚点注释。
- FreeRTOSConfig.h:恢复 FREE_RTOS_CONFIG_HARDENING 块(两个加固宏)。
- freertos.c:补回两处任务栈中文注释(栈值未丢,.ioc 已同步)。
配套:
- check_cubemx_survival.py:hardfault-handler 改 wholefile + 锚点检查;
UNPROTECTED_LEGACY 清单更新。
- AGENTS.md:新增"CubeMX 换模板"与"ARMCC 内联汇编语法"两条铁律,
以及"uvprojx 被 Keil 自动改写不入库"条目。
- 看门狗设计说明.md:§10.1 补第二次重生成验证结论与模板换代发现,
§10.2 L2/L3 全面改写(自造区名不可依赖)。
验证:@build 0 错误 0 警告;pre-commit 13 钩子全通过;审计 16 通过 / 2 警告 / 0 失败。
|
2026-09-29 07:52:39 +08:00 |
|