Files
STM32F4-Base/test/host/adc_input/run_unit_test.py
T
wandering1 0e4cc03c2d docs(ADC): 更正注入验证口径——已知电压注入 2026-10-27 台架已闭环
数据可信.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 处失效;
该批文件里的变更记录节按同日裁定一并清理。
2026-10-28 22:00:33 +08:00

56 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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))