0e4cc03c2d
数据可信.md §2.6 原写「ADC 从未采过已知电压」,那是 2026-10-23 挂账 时的现状,与 2026-10-27 的台架实测矛盾——按现状重写:实测 × 判据表 + ④ 段(端子 → AINn 子板变比)缺口 + M4 承诺边界(只到 ADC 引脚电压、 eng = 0);§2.6 节号与「承诺边界」口径保留,代码头注释的引用不断。 同族陈旧现在时一并更正:继电保护规划「引脚级注入验证仍为待做项」、 ADC通道映射 §7.1「不填任何实测数值」、ADC输入层单测说明「板端无信 号源、无法验证读到的是哪只脚」、adc_input.c 与 test/host/adc_input 两份注释「注入验证做不了」→ 统一改成「台架已一次性验过(§8.1), 主机单测与开机自检仍必要」。首帧悬案等历史叙述删除,只留结论。 顺带:ADC 输入层单测计数 101 → 103(runner 报 103/103 与 CHECK 调用 点 103 处双源互证),test/host/README.md 同数同步。 验证:@build 0 错 0 警(Code=236456 RO=28124 RW=1876 ZI=137084); test/host/adc_input 103/103 rc=0;check_doc_links --all 0 处失效; 该批文件里的变更记录节按同日裁定一并清理。
56 lines
2.6 KiB
Python
56 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""ADC 输入层(语义取数与有效性,adc_input)的主机侧纯逻辑单元测试运行器(纯标准库)。
|
||
|
||
做什么:
|
||
用本机 MSVC 编译 test/host/adc_input/adc_input_test.c(它以 #include 纳入
|
||
**生产源文件** App/algo/adc_input.c),在 PC 上离线跑语义映射表 / STM32 ADC1
|
||
DMA 乒乓帧消费(含半区选择)/ TPAFE 快照消费 / 取数守卫 / poll 契约 / 四类故障
|
||
计数(seq / gap / err / hw),失败即非 0 退出。
|
||
零硬件、零烧录、毫秒级。
|
||
|
||
工具链探测 / INCLUDE-LIB 拼接 / 编译运行 / 退出码判定全部委托给通用 harness
|
||
`test/host/common/unit_test_harness.py`(本文件只做声明)。
|
||
|
||
为什么要主机侧单测(而不是只用板端套件):
|
||
本层核心是"**通道号 <-> Rank 顺序 <-> 语义**"三者映射的正确性。台架只在 2026-10-27 一次性验过
|
||
映射(实测记录 docs/硬件平台/ADC通道映射说明.md §8.1),不占 CI、不能每改必跑;主机侧给每个
|
||
Rank 注入互不相同的码值,**逐通道钉死映射**,并一次钉死 HAL 启动失败 / 转换超时 / 参数错等
|
||
真机难复现的分支。
|
||
|
||
用法(仓库根目录):
|
||
python test/host/adc_input/run_unit_test.py
|
||
或统一用 .venv: & '.venv\\Scripts\\python.exe' test/host/adc_input/run_unit_test.py
|
||
|
||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||
|
||
设计依据:docs/算法/继电保护功能复现规划.md §2.1(STM32 ADC1 启动与扫描 / 通道语义映射);
|
||
创建日期:2026-10-10
|
||
"""
|
||
import os
|
||
import sys
|
||
|
||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||
ROOT = os.path.dirname(os.path.dirname(os.path.dirname(HERE)))
|
||
# harness 位于 test/host/common/
|
||
sys.path.insert(0, os.path.join(ROOT, "test", "host", "common"))
|
||
|
||
from unit_test_harness import TestBuild, run_host_unit_test # noqa: E402
|
||
|
||
# 顺序敏感:stub 目录必须**先于**生产目录,才能覆盖 adc.h / tpafe5160.h
|
||
# (真实头会经 main.h 拖入整套 HAL,主机侧无法编译)。adc_input.h 用真实头
|
||
# (接口契约原汁);HAL_ADC_* 与 tpafe5160_snapshot 由测试单元给强符号桩。
|
||
BUILD = TestBuild(
|
||
name="ADC Input Tests",
|
||
src=os.path.join(HERE, "adc_input_test.c"),
|
||
include_dirs=[
|
||
os.path.join(HERE, "stub"),
|
||
os.path.join(ROOT, "App", "algo"),
|
||
HERE,
|
||
],
|
||
summary_marker="=== ADC Input Tests:",
|
||
)
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(run_host_unit_test(BUILD))
|