Commit Graph

8 Commits

Author SHA1 Message Date
wandering1 c25baba2f1 对齐 L2-2 实例数口径:规划表 4 → 5 个实例(参考项目 4 个)
- 规划 §3.2 L2-2 行:由"4 个实例:C01 基波 I/U、C02 零序基波、C03 二次、C04 五次"
  改为本项目的 5 个实例(C01-IA-F1 / C02-UA-F1 / C03-UN-F1 / C04-IA-F2 /
  C05-IA-F5),并加注说明 4 → 5 的来历:参考项目为 4 个,本项目按 V0.1 有效通道
  (UA/UN/IA)把 C01 的 I/U 拆为两行,其余顺延。
- 规划 §4.3 相量区 RAM 行:双区 + 4 实例 → 双区 + 5 实例。
- 傅氏算法详解 §7:该处的"4 个实例"标注为参考项目口径(其引用来源是
  APP/CLS100_Dsp/InstCalCell.c),并指向规划 §3.2 的本项目口径。
- 相量层单测说明 §4.3:由"与规划表的一处待对齐"改为"实例数 4 → 5:规划表已对齐"。
- 规划文档补记 L2 相量层落地(sample_ring + phasor + 57 用例主机单测),并显式说明
  §3.2 的 L2 各点状态仍标 ⬜ 的理由:台架 @test 闭环未做、L2-3 判据需标准源。
2026-10-10 18:16:17 +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 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 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