refactor(编号): 16 个测试模块码单词化 + 门禁识别面连带放宽
批 2(用户授权改名 + 「新名要一眼看懂」裁定)
- 16 个有歧义模块码单词化,共 1,146 处随 scripts/rename_ids.py 改写:
AI→ADCIN、AH→ADCHEALTH、PS→PROTSET、PE→PROTELEM、PH→PHASOR、
TS→TIMESYNC、VL→VOLLOCK、NP→NANDPORT、CFG→CONFIG、CLK→SYSCLK、
WD→WATCHDOG、STO→STORAGE、SH→SHA256、FA→FTPAUTH、FR→FREQ、104→IEC104
- 不动 NET/GD5F/RTC/SOE/UI/ADC/LOG/RS485/TOOL(已是单词、芯片名或业界通用词,
改了纯属 churn)
- 别名按全局登记:这批字面量已完全限定(TC-<码>-<nnn>),不存在裸形多义
- 映射表存档 scripts/rename_maps/batch2.json 作审计轨迹;§6 模块码表同步
连带修门禁(关键教训)
- 模块码涨到 9 位(ADCHEALTH/WATCHDOG)后,候选正则与族正则的 {0,4} 上界
会让改名后的号**整批从门禁眼里消失**:实测编号字面量从 8271 掉到 7315、
悬空假降 490 处。已放宽到 {0,9} 并写进 §6 注记
- 结论:改名批次必须连带复核识别面,只改数据不改判据 = 静默放行;
这次是靠「可判定比例跌破基线即失败」那条线拦下来的
现状与遗留
- 校验 1 未登记前缀 0 处;可判定比例 82.71%(基线 82.6%,只涨不跌成立)
- 遗留:7 个模块的「单元测试说明.md」仍缺(PROTSET 116、NANDPORT 109、
PROTELEM 65、FREQ 48、FTPAUTH 45、SHA256 25、SOE 14 处悬空)——改名不解决
缺文档,处置方式待议
- 遗留:T-2/T-3/T-4/T-6 历史任务号悬空(别名表未收全,属本工具批次漏项)
- 未改任何 C/H 可编译语义(仅注释与宏名内的编号),故不需 @build
This commit is contained in:
@@ -18,51 +18,51 @@
|
||||
* 3. 不占 MCU 的 RAM,毫秒级完成。
|
||||
*
|
||||
* 覆盖点(对应 docs/算法/继电保护功能复现规划.md §2.1 的 L1-3 / L1-4):
|
||||
* —— adc_input_init(TC-AI-001..006)——
|
||||
* TC-AI-001 poll 失败后失败计数可见(前置状态构造)
|
||||
* TC-AI-002 poll 成功后 TPAFE 侧可取数(前置状态构造)
|
||||
* TC-AI-003 init 返回 0(映射表自检通过)
|
||||
* TC-AI-004 init 后 STM32 状态码 = NOT_RUN
|
||||
* TC-AI-005 init 后失败计数归零
|
||||
* TC-AI-006 init 后 TPAFE / STM32 两侧均无有效数据(有效标志被清)
|
||||
* —— adc_input_desc(TC-AI-010..01A)——
|
||||
* TC-AI-010..018 九个语义通道 -> (来源, 下标) 与权威映射表逐项一致
|
||||
* TC-AI-019/01A 越界(ADC_SEM_COUNT)与负数语义 -> NULL
|
||||
* —— map_check(TC-AI-020)——
|
||||
* TC-AI-020 真实映射表自洽(反向路径结构上不可达,见文件末说明)
|
||||
* —— stm32_take(TC-AI-021..078,v2.0 DMA 模型)——
|
||||
* TC-AI-021..025 取到新帧:返回 0 / 状态码 / 不计失败 / DMA 只挂一次 / seq=1
|
||||
* TC-AI-026..02B **Rank -> 通道号映射**:UB->CH14(rank9) / UC->CH3(rank4) /
|
||||
* —— adc_input_init(TC-ADCIN-001..006)——
|
||||
* TC-ADCIN-001 poll 失败后失败计数可见(前置状态构造)
|
||||
* TC-ADCIN-002 poll 成功后 TPAFE 侧可取数(前置状态构造)
|
||||
* TC-ADCIN-003 init 返回 0(映射表自检通过)
|
||||
* TC-ADCIN-004 init 后 STM32 状态码 = NOT_RUN
|
||||
* TC-ADCIN-005 init 后失败计数归零
|
||||
* TC-ADCIN-006 init 后 TPAFE / STM32 两侧均无有效数据(有效标志被清)
|
||||
* —— adc_input_desc(TC-ADCIN-010..01A)——
|
||||
* TC-ADCIN-010..018 九个语义通道 -> (来源, 下标) 与权威映射表逐项一致
|
||||
* TC-ADCIN-019/01A 越界(ADC_SEM_COUNT)与负数语义 -> NULL
|
||||
* —— map_check(TC-ADCIN-020)——
|
||||
* TC-ADCIN-020 真实映射表自洽(反向路径结构上不可达,见文件末说明)
|
||||
* —— stm32_take(TC-ADCIN-021..078,v2.0 DMA 模型)——
|
||||
* TC-ADCIN-021..025 取到新帧:返回 0 / 状态码 / 不计失败 / DMA 只挂一次 / seq=1
|
||||
* TC-ADCIN-026..02B **Rank -> 通道号映射**:UB->CH14(rank9) / UC->CH3(rank4) /
|
||||
* IB->CH6(rank7) / IC->CH1(rank2) / IN->CH2(rank3) / TEMP->CH5(rank6)
|
||||
* TC-AI-02C stm32_take 不置 TPAFE 有效标志(两来源独立)
|
||||
* TC-AI-080..089 **乒乓双缓冲**:消费侧读"刚完成的半区",即使另一半正被 DMA
|
||||
* TC-ADCIN-02C stm32_take 不置 TPAFE 有效标志(两来源独立)
|
||||
* TC-ADCIN-080..089 **乒乓双缓冲**:消费侧读"刚完成的半区",即使另一半正被 DMA
|
||||
* 改写也不得读到(撕裂帧防线);两拍交替半区、seq 推进;
|
||||
* 超拍未消费 -> 记一次丢帧(gap),与停摆(err)分开计数
|
||||
* TC-AI-090..09A HAL 错误回调计数 + 三个回调的 `hadc == &hadc1` 句柄守卫
|
||||
* TC-ADCIN-090..09A HAL 错误回调计数 + 三个回调的 `hadc == &hadc1` 句柄守卫
|
||||
* (别的句柄不得污染本层 seq / hw_errs)
|
||||
* TC-AI-030..034 HAL_ADC_Start_DMA 失败:init 返回 -2 / 状态码 RC_START / 计数 +1
|
||||
* TC-AI-035..039 本拍无新帧:返回 RC_STALL / **单拍不计故障**(相位伪影)/ seq 不前进
|
||||
* TC-AI-03A..03E 连续两拍无新帧才计停摆;停摆与丢帧分开计数;恢复拍自愈
|
||||
* TC-AI-070..078 **停摆拍不得沿用上一拍旧值**(2026-10-10 补,真机实测发现的
|
||||
* TC-ADCIN-030..034 HAL_ADC_Start_DMA 失败:init 返回 -2 / 状态码 RC_START / 计数 +1
|
||||
* TC-ADCIN-035..039 本拍无新帧:返回 RC_STALL / **单拍不计故障**(相位伪影)/ seq 不前进
|
||||
* TC-ADCIN-03A..03E 连续两拍无新帧才计停摆;停摆与丢帧分开计数;恢复拍自愈
|
||||
* TC-ADCIN-070..078 **停摆拍不得沿用上一拍旧值**(2026-10-10 补,真机实测发现的
|
||||
* 正确性缺陷;DMA 版改由"无新帧"触发同一路径):先成功一拍让
|
||||
* STM32 侧进入有效态,再注入无新帧拍 -> adc_input_raw() 必须返 -2;
|
||||
* 恢复拍重新置有效。TC-AI-034 只覆盖"挂载失败即无数据",
|
||||
* 恢复拍重新置有效。TC-ADCIN-034 只覆盖"挂载失败即无数据",
|
||||
* 照不出"成功过之后停摆 → 静默沿用旧值",故单独立一组。
|
||||
* —— adc_input_raw(TC-AI-040..04B)——
|
||||
* TC-AI-040..043 参数守卫:out=NULL / 越界 / 负数 -> -1,且不写 out
|
||||
* TC-AI-044/045 无有效数据 -> -2(两来源分别)
|
||||
* TC-AI-046..048 poll 快照契约:返回码透传 / 请求 8 通道 / 目的缓冲非空
|
||||
* TC-AI-049..04B TPAFE 按**下标**取数(UA=6 / UN=5 / IA=2)且补码负值原样保留
|
||||
* —— adc_input_poll(TC-AI-050..058)——
|
||||
* TC-AI-050..052 无新帧(0):返回 0 / TPAFE 无效 / STM32 侧照常扫描
|
||||
* TC-AI-053/054 参数错(-1):返回 -1 / TPAFE 无效
|
||||
* TC-AI-055 已有有效帧后再"无新帧"**不清零**(保持上次有效值)
|
||||
* TC-AI-056..058 STM32 失败**不阻断** TPAFE、**不影响** poll 返回值,另由状态码暴露
|
||||
* —— adc_input_stm32_rc / _errs(TC-AI-060..066)——
|
||||
* TC-AI-060/061 init 后 = NOT_RUN / 计数 0
|
||||
* TC-AI-062 成功: rc=OK 且 errs 不变
|
||||
* TC-AI-063/064 两次失败累计 = 2,rc = 最近一次(TIMEOUT)
|
||||
* TC-AI-065/066 恢复成功 rc=OK,errs 单调不回退
|
||||
* —— adc_input_raw(TC-ADCIN-040..04B)——
|
||||
* TC-ADCIN-040..043 参数守卫:out=NULL / 越界 / 负数 -> -1,且不写 out
|
||||
* TC-ADCIN-044/045 无有效数据 -> -2(两来源分别)
|
||||
* TC-ADCIN-046..048 poll 快照契约:返回码透传 / 请求 8 通道 / 目的缓冲非空
|
||||
* TC-ADCIN-049..04B TPAFE 按**下标**取数(UA=6 / UN=5 / IA=2)且补码负值原样保留
|
||||
* —— adc_input_poll(TC-ADCIN-050..058)——
|
||||
* TC-ADCIN-050..052 无新帧(0):返回 0 / TPAFE 无效 / STM32 侧照常扫描
|
||||
* TC-ADCIN-053/054 参数错(-1):返回 -1 / TPAFE 无效
|
||||
* TC-ADCIN-055 已有有效帧后再"无新帧"**不清零**(保持上次有效值)
|
||||
* TC-ADCIN-056..058 STM32 失败**不阻断** TPAFE、**不影响** poll 返回值,另由状态码暴露
|
||||
* —— adc_input_stm32_rc / _errs(TC-ADCIN-060..066)——
|
||||
* TC-ADCIN-060/061 init 后 = NOT_RUN / 计数 0
|
||||
* TC-ADCIN-062 成功: rc=OK 且 errs 不变
|
||||
* TC-ADCIN-063/064 两次失败累计 = 2,rc = 最近一次(TIMEOUT)
|
||||
* TC-ADCIN-065/066 恢复成功 rc=OK,errs 单调不回退
|
||||
*
|
||||
* 通过:全部 TC PASS(main 返回 0)。
|
||||
* 入口:int main(void),返回 0=PASS / 1=FAIL(由 run 脚本判读)。
|
||||
@@ -201,7 +201,7 @@ static void dma_beat(uint16_t base) {
|
||||
}
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-001..006:init ===================== */
|
||||
/* ===================== TC-ADCIN-001..006:init ===================== */
|
||||
|
||||
static void tc_init(void) {
|
||||
int32_t v = -999;
|
||||
@@ -213,69 +213,69 @@ static void tc_init(void) {
|
||||
(void)adc_input_poll(); /* 单拍无新帧 = 相位伪影,不计故障 */
|
||||
(void)adc_input_poll(); /* 连续第二拍无新帧 = 真停摆 */
|
||||
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-AI-001 连续两拍无新帧 -> 停摆计数 = 1");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-ADCIN-001 连续两拍无新帧 -> 停摆计数 = 1");
|
||||
CHECK((adc_input_raw(ADC_SEM_UA, &v) == 0) && (v == 4321),
|
||||
"TC-AI-002 poll 后 UA 可取数且值正确");
|
||||
"TC-ADCIN-002 poll 后 UA 可取数且值正确");
|
||||
|
||||
CHECK(adc_input_init() == 0, "TC-AI-003 adc_input_init 返回 0(映射自检通过)");
|
||||
CHECK(adc_input_init() == 0, "TC-ADCIN-003 adc_input_init 返回 0(映射自检通过)");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_NOT_RUN,
|
||||
"TC-AI-004 init 后 STM32 状态码 = NOT_RUN");
|
||||
CHECK(s_start_dma_calls == 1, "TC-AI-003B init 挂载 DMA 恰好一次");
|
||||
CHECK(s_dma_len == (2u * ADC_INPUT_STM32_CH_NUM), "TC-AI-003C DMA 长度 = 2 x 9(乒乓双缓冲)");
|
||||
CHECK(s_dma_buf != NULL, "TC-AI-003D DMA 目的缓冲地址已交下来");
|
||||
CHECK(adc_input_stm32_seq() == 0u, "TC-AI-005B init 后 DMA 完成计数 = 0");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-AI-005 init 后 STM32 失败计数归零");
|
||||
"TC-ADCIN-004 init 后 STM32 状态码 = NOT_RUN");
|
||||
CHECK(s_start_dma_calls == 1, "TC-ADCIN-003B init 挂载 DMA 恰好一次");
|
||||
CHECK(s_dma_len == (2u * ADC_INPUT_STM32_CH_NUM), "TC-ADCIN-003C DMA 长度 = 2 x 9(乒乓双缓冲)");
|
||||
CHECK(s_dma_buf != NULL, "TC-ADCIN-003D DMA 目的缓冲地址已交下来");
|
||||
CHECK(adc_input_stm32_seq() == 0u, "TC-ADCIN-005B init 后 DMA 完成计数 = 0");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-ADCIN-005 init 后 STM32 失败计数归零");
|
||||
CHECK((adc_input_raw(ADC_SEM_UA, &v) == -2) && (adc_input_raw(ADC_SEM_UB, &v) == -2),
|
||||
"TC-AI-006 init 后 TPAFE / STM32 两侧均无有效数据");
|
||||
"TC-ADCIN-006 init 后 TPAFE / STM32 两侧均无有效数据");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-010..01A:desc 映射表 ===================== */
|
||||
/* ===================== TC-ADCIN-010..01A:desc 映射表 ===================== */
|
||||
|
||||
static void tc_desc(void) {
|
||||
const adc_channel_desc_t *d;
|
||||
|
||||
d = adc_input_desc(ADC_SEM_UA);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_TPAFE) && (d->index == 6u),
|
||||
"TC-AI-010 UA -> TPAFE buf[6]");
|
||||
"TC-ADCIN-010 UA -> TPAFE buf[6]");
|
||||
d = adc_input_desc(ADC_SEM_UB);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_STM32) && (d->index == 14u),
|
||||
"TC-AI-011 UB -> STM32 CH14");
|
||||
"TC-ADCIN-011 UB -> STM32 CH14");
|
||||
d = adc_input_desc(ADC_SEM_UC);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_STM32) && (d->index == 3u),
|
||||
"TC-AI-012 UC -> STM32 CH3");
|
||||
"TC-ADCIN-012 UC -> STM32 CH3");
|
||||
d = adc_input_desc(ADC_SEM_UN);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_TPAFE) && (d->index == 5u),
|
||||
"TC-AI-013 UN -> TPAFE buf[5]");
|
||||
"TC-ADCIN-013 UN -> TPAFE buf[5]");
|
||||
d = adc_input_desc(ADC_SEM_IA);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_TPAFE) && (d->index == 2u),
|
||||
"TC-AI-014 IA -> TPAFE buf[2]");
|
||||
"TC-ADCIN-014 IA -> TPAFE buf[2]");
|
||||
d = adc_input_desc(ADC_SEM_IB);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_STM32) && (d->index == 6u),
|
||||
"TC-AI-015 IB -> STM32 CH6");
|
||||
"TC-ADCIN-015 IB -> STM32 CH6");
|
||||
d = adc_input_desc(ADC_SEM_IC);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_STM32) && (d->index == 1u),
|
||||
"TC-AI-016 IC -> STM32 CH1");
|
||||
"TC-ADCIN-016 IC -> STM32 CH1");
|
||||
d = adc_input_desc(ADC_SEM_IN);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_STM32) && (d->index == 2u),
|
||||
"TC-AI-017 IN -> STM32 CH2");
|
||||
"TC-ADCIN-017 IN -> STM32 CH2");
|
||||
d = adc_input_desc(ADC_SEM_TEMP);
|
||||
CHECK((d != NULL) && (d->source == ADC_SRC_STM32) && (d->index == 5u),
|
||||
"TC-AI-018 TEMP -> STM32 CH5");
|
||||
"TC-ADCIN-018 TEMP -> STM32 CH5");
|
||||
|
||||
CHECK(adc_input_desc(ADC_SEM_COUNT) == NULL, "TC-AI-019 越界(ADC_SEM_COUNT) -> NULL");
|
||||
CHECK(adc_input_desc((adc_semantic_t)(-1)) == NULL, "TC-AI-01A 负数语义 -> NULL");
|
||||
CHECK(adc_input_desc(ADC_SEM_COUNT) == NULL, "TC-ADCIN-019 越界(ADC_SEM_COUNT) -> NULL");
|
||||
CHECK(adc_input_desc((adc_semantic_t)(-1)) == NULL, "TC-ADCIN-01A 负数语义 -> NULL");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-020:map_check ===================== */
|
||||
/* ===================== TC-ADCIN-020:map_check ===================== */
|
||||
|
||||
static void tc_map_check(void) {
|
||||
/* 真实映射表自洽:TPAFE 下标 < 8 且每个 STM32 通道号都出现在扫描 Rank 内。
|
||||
* 反向路径(表不自洽 -> -1)需在运行时改表,而 k_adc_map / k_stm32_rank_ch 均为
|
||||
* 编译期 static const、无运行时输入可使其不自洽 -> 结构上不可达(见文件末说明)。 */
|
||||
CHECK(map_check() == 0, "TC-AI-020 映射表自洽(TPAFE 下标与 STM32 Rank 均在范围内)");
|
||||
CHECK(map_check() == 0, "TC-ADCIN-020 映射表自洽(TPAFE 下标与 STM32 Rank 均在范围内)");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-021..02C:stm32_scan 成功路径 ===================== */
|
||||
/* ===================== TC-ADCIN-021..02C:stm32_scan 成功路径 ===================== */
|
||||
|
||||
static void tc_take_ok(void) {
|
||||
int32_t v = 0;
|
||||
@@ -284,25 +284,25 @@ static void tc_take_ok(void) {
|
||||
(void)adc_input_init();
|
||||
dma_beat(100); /* 前半区一帧:Rank i -> 100+i */
|
||||
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-021 stm32_take 取到新帧 -> 0");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_OK, "TC-AI-022 状态码 = RC_OK");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-AI-023 成功不计入失败");
|
||||
CHECK(s_start_dma_calls == 1, "TC-AI-024 DMA 只在 init 挂一次(每拍不重启)");
|
||||
CHECK(adc_input_stm32_seq() == 1u, "TC-AI-025 DMA 完成计数 = 1");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-021 stm32_take 取到新帧 -> 0");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_OK, "TC-ADCIN-022 状态码 = RC_OK");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-ADCIN-023 成功不计入失败");
|
||||
CHECK(s_start_dma_calls == 1, "TC-ADCIN-024 DMA 只在 init 挂一次(每拍不重启)");
|
||||
CHECK(adc_input_stm32_seq() == 1u, "TC-ADCIN-025 DMA 完成计数 = 1");
|
||||
|
||||
/* Rank -> 通道号映射:第 i 个 Rank = 100+i。
|
||||
* k_stm32_rank_ch = [CH0..CH7, CH14],故 CH3->103 / CH5->105 / CH6->106 / CH14->108。 */
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 108), "TC-AI-026 UB 取到 CH14(rank9)=108");
|
||||
CHECK((adc_input_raw(ADC_SEM_UC, &v) == 0) && (v == 103), "TC-AI-027 UC 取到 CH3(rank4)=103");
|
||||
CHECK((adc_input_raw(ADC_SEM_IB, &v) == 0) && (v == 106), "TC-AI-028 IB 取到 CH6(rank7)=106");
|
||||
CHECK((adc_input_raw(ADC_SEM_IC, &v) == 0) && (v == 101), "TC-AI-029 IC 取到 CH1(rank2)=101");
|
||||
CHECK((adc_input_raw(ADC_SEM_IN, &v) == 0) && (v == 102), "TC-AI-02A IN 取到 CH2(rank3)=102");
|
||||
CHECK((adc_input_raw(ADC_SEM_TEMP, &v) == 0) && (v == 105), "TC-AI-02B TEMP 取到 CH5(rank6)=105");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 108), "TC-ADCIN-026 UB 取到 CH14(rank9)=108");
|
||||
CHECK((adc_input_raw(ADC_SEM_UC, &v) == 0) && (v == 103), "TC-ADCIN-027 UC 取到 CH3(rank4)=103");
|
||||
CHECK((adc_input_raw(ADC_SEM_IB, &v) == 0) && (v == 106), "TC-ADCIN-028 IB 取到 CH6(rank7)=106");
|
||||
CHECK((adc_input_raw(ADC_SEM_IC, &v) == 0) && (v == 101), "TC-ADCIN-029 IC 取到 CH1(rank2)=101");
|
||||
CHECK((adc_input_raw(ADC_SEM_IN, &v) == 0) && (v == 102), "TC-ADCIN-02A IN 取到 CH2(rank3)=102");
|
||||
CHECK((adc_input_raw(ADC_SEM_TEMP, &v) == 0) && (v == 105), "TC-ADCIN-02B TEMP 取到 CH5(rank6)=105");
|
||||
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-AI-02C stm32_take 不置 TPAFE 有效标志");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-ADCIN-02C stm32_take 不置 TPAFE 有效标志");
|
||||
}
|
||||
|
||||
/* ============ TC-AI-080..085:乒乓双缓冲(读刚完成半区,不读正在写的半区) ============
|
||||
/* ============ TC-ADCIN-080..085:乒乓双缓冲(读刚完成半区,不读正在写的半区) ============
|
||||
* 这是 DMA 方案最关键的一条:消费侧必须读"上一拍刚完成的那一半",而 DMA 此刻正在
|
||||
* 写另一半。若读错半区,取到的是**正在被改写**的数据 → 半新半旧的撕裂帧。 */
|
||||
|
||||
@@ -314,30 +314,30 @@ static void tc_dma_pingpong(void) {
|
||||
|
||||
dma_beat(100); /* 第 1 帧 -> 前半区(半传输回调) */
|
||||
dma_fill(1u, 900u); /* 模拟 DMA 正在写后半区(值 900 系) */
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-080 第一拍取帧成功");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-080 第一拍取帧成功");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 108),
|
||||
"TC-AI-081 读的是刚完成的前半区(108),不是正在写的后半区");
|
||||
"TC-ADCIN-081 读的是刚完成的前半区(108),不是正在写的后半区");
|
||||
|
||||
dma_beat(200); /* 第 2 帧 -> 后半区(传输完成回调) */
|
||||
dma_fill(0u, 800u); /* 模拟 DMA 正在写前半区(值 800 系) */
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-082 第二拍取帧成功");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-082 第二拍取帧成功");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 208),
|
||||
"TC-AI-083 第二拍读到后半区(208)");
|
||||
CHECK(adc_input_stm32_seq() == 2u, "TC-AI-084 DMA 完成计数 = 2");
|
||||
"TC-ADCIN-083 第二拍读到后半区(208)");
|
||||
CHECK(adc_input_stm32_seq() == 2u, "TC-ADCIN-084 DMA 完成计数 = 2");
|
||||
|
||||
/* 半区奇偶口径:seq=1 -> 前半区,seq=2 -> 后半区(与 dma_beat 独立推导,互相证伪) */
|
||||
CHECK(((adc_input_raw(ADC_SEM_UC, &v) == 0) && (v == 203)), "TC-AI-085 UC 同帧内一致(203)");
|
||||
CHECK(((adc_input_raw(ADC_SEM_UC, &v) == 0) && (v == 203)), "TC-ADCIN-085 UC 同帧内一致(203)");
|
||||
|
||||
/* 消费者超拍:两拍都没取 -> 中间那帧已被乒乓缓冲覆盖 -> 记一次丢帧 */
|
||||
dma_beat(300);
|
||||
dma_beat(400);
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-086 超拍后仍取到最新帧");
|
||||
CHECK(adc_input_stm32_gaps() == 1u, "TC-AI-087 seq 前进 2 -> 记一次丢帧");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 408), "TC-AI-088 取到的是最新帧(408)");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-AI-089 丢帧不计入停摆(两类故障分开)");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-086 超拍后仍取到最新帧");
|
||||
CHECK(adc_input_stm32_gaps() == 1u, "TC-ADCIN-087 seq 前进 2 -> 记一次丢帧");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 408), "TC-ADCIN-088 取到的是最新帧(408)");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-ADCIN-089 丢帧不计入停摆(两类故障分开)");
|
||||
}
|
||||
|
||||
/* ============ TC-AI-090..093:HAL 错误回调与句柄守卫 ============ */
|
||||
/* ============ TC-ADCIN-090..093:HAL 错误回调与句柄守卫 ============ */
|
||||
|
||||
static void tc_hw_errs(void) {
|
||||
fakes_reset();
|
||||
@@ -345,21 +345,21 @@ static void tc_hw_errs(void) {
|
||||
|
||||
HAL_ADC_ErrorCallback(&hadc1);
|
||||
HAL_ADC_ErrorCallback(&hadc1);
|
||||
CHECK(adc_input_stm32_hw_errs() == 2u, "TC-AI-090 错误回调累计 = 2");
|
||||
CHECK(adc_input_stm32_hw_errs() == 2u, "TC-ADCIN-090 错误回调累计 = 2");
|
||||
|
||||
HAL_ADC_ErrorCallback(&hadc_other);
|
||||
CHECK(adc_input_stm32_hw_errs() == 2u, "TC-AI-091 别的 ADC 句柄不得计入(hadc 守卫)");
|
||||
CHECK(adc_input_stm32_hw_errs() == 2u, "TC-ADCIN-091 别的 ADC 句柄不得计入(hadc 守卫)");
|
||||
|
||||
HAL_ADC_ConvHalfCpltCallback(&hadc_other);
|
||||
HAL_ADC_ConvCpltCallback(&hadc_other);
|
||||
CHECK(adc_input_stm32_seq() == 0u, "TC-AI-092 别的句柄的完成回调不得推进 seq");
|
||||
CHECK(adc_input_stm32_seq() == 0u, "TC-ADCIN-092 别的句柄的完成回调不得推进 seq");
|
||||
|
||||
HAL_ADC_ErrorCallback(&hadc1);
|
||||
CHECK(adc_input_stm32_hw_errs() == 3u, "TC-AI-093 hw_errs 与 errs 分开计数、互不干扰");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-AI-09A hw_errs 不污染 errs");
|
||||
CHECK(adc_input_stm32_hw_errs() == 3u, "TC-ADCIN-093 hw_errs 与 errs 分开计数、互不干扰");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-ADCIN-09A hw_errs 不污染 errs");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-030..034:DMA 挂载失败 ===================== */
|
||||
/* ===================== TC-ADCIN-030..034:DMA 挂载失败 ===================== */
|
||||
|
||||
static void tc_init_dma_fail(void) {
|
||||
int32_t v = 0;
|
||||
@@ -367,13 +367,13 @@ static void tc_init_dma_fail(void) {
|
||||
fakes_reset();
|
||||
s_start_dma_rc = HAL_ERROR;
|
||||
|
||||
CHECK(adc_input_init() == -2, "TC-AI-030 HAL_ADC_Start_DMA 失败 -> init 返回 -2");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_START, "TC-AI-031 状态码 = RC_START");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-AI-032 失败计数 +1");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-AI-034 挂载失败后 STM32 侧无有效数据");
|
||||
CHECK(adc_input_init() == -2, "TC-ADCIN-030 HAL_ADC_Start_DMA 失败 -> init 返回 -2");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_START, "TC-ADCIN-031 状态码 = RC_START");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-ADCIN-032 失败计数 +1");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-ADCIN-034 挂载失败后 STM32 侧无有效数据");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-035..03A:本拍无新帧(停摆) ===================== */
|
||||
/* ===================== TC-ADCIN-035..03A:本拍无新帧(停摆) ===================== */
|
||||
|
||||
static void tc_take_stall(void) {
|
||||
int32_t v = 0;
|
||||
@@ -382,29 +382,29 @@ static void tc_take_stall(void) {
|
||||
(void)adc_input_init();
|
||||
/* 没有任何 DMA 完成回调 = TIM3 未启动 / ADC 停摆 / DMA 出错 */
|
||||
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_STALL, "TC-AI-035 无新帧 -> RC_STALL(-2)");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_STALL, "TC-AI-036 状态码 = RC_STALL");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-AI-037 单拍无新帧不计故障(相位伪影)");
|
||||
CHECK(adc_input_stm32_seq() == 0u, "TC-AI-038 停摆期间 seq 不前进");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-AI-039 停摆拍 STM32 侧无有效数据");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_STALL, "TC-ADCIN-035 无新帧 -> RC_STALL(-2)");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_STALL, "TC-ADCIN-036 状态码 = RC_STALL");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-ADCIN-037 单拍无新帧不计故障(相位伪影)");
|
||||
CHECK(adc_input_stm32_seq() == 0u, "TC-ADCIN-038 停摆期间 seq 不前进");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-ADCIN-039 停摆拍 STM32 侧无有效数据");
|
||||
|
||||
(void)stm32_take(); /* 连续第二拍无新帧 = 真停摆 */
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-AI-03A 连续两拍无新帧 -> 停摆计数 = 1");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-ADCIN-03A 连续两拍无新帧 -> 停摆计数 = 1");
|
||||
(void)stm32_take(); /* 第三拍仍无新帧 */
|
||||
CHECK(adc_input_stm32_errs() == 2u, "TC-AI-03B 停摆持续 -> 每拍累计 = 2");
|
||||
CHECK(adc_input_stm32_gaps() == 0u, "TC-AI-03C 停摆不计入丢帧(两类故障分开)");
|
||||
CHECK(adc_input_stm32_errs() == 2u, "TC-ADCIN-03B 停摆持续 -> 每拍累计 = 2");
|
||||
CHECK(adc_input_stm32_gaps() == 0u, "TC-ADCIN-03C 停摆不计入丢帧(两类故障分开)");
|
||||
|
||||
dma_beat(100); /* 恢复 */
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-03D 恢复后取帧成功");
|
||||
CHECK(adc_input_stm32_gaps() == 0u, "TC-AI-03E 恢复拍前进 1 -> 不算丢帧");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-03D 恢复后取帧成功");
|
||||
CHECK(adc_input_stm32_gaps() == 0u, "TC-ADCIN-03E 恢复拍前进 1 -> 不算丢帧");
|
||||
}
|
||||
|
||||
/* ============ TC-AI-070..078:停摆拍不得沿用上一拍旧值(陈旧帧) ============
|
||||
/* ============ TC-ADCIN-070..078:停摆拍不得沿用上一拍旧值(陈旧帧) ============
|
||||
* 背景(2026-10-10 真机实测发现):本层只有一份 s_stm32_raw[],而 s_stm32_valid
|
||||
* 此前只在成功时置 1、失败时**从不清零** → 消费侧照样取数、照样压入采样环,
|
||||
* s_frames_skip 抓不到。轮询版的触发路径是"超时拍半新半旧",DMA 版(v2.0)改成
|
||||
* "本拍无新帧仍沿用上一拍"——**同一条缺陷、同一个防线**,故本组用例保留。
|
||||
* TC-AI-034 是"挂载失败后本就无数据"(valid 一直是 0),照不出这条路径——
|
||||
* TC-ADCIN-034 是"挂载失败后本就无数据"(valid 一直是 0),照不出这条路径——
|
||||
* 必须先成功一拍。 */
|
||||
|
||||
static void tc_take_stale(void) {
|
||||
@@ -414,27 +414,27 @@ static void tc_take_stale(void) {
|
||||
fakes_reset();
|
||||
(void)adc_input_init();
|
||||
dma_beat(100);
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-070 前置:首拍成功");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 108), "TC-AI-071 前置:UB 取到 108(有效态)");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-070 前置:首拍成功");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 108), "TC-ADCIN-071 前置:UB 取到 108(有效态)");
|
||||
|
||||
/* 第二拍没有任何 DMA 完成(TIM3 停 / ADC 停摆 / DMA 出错) */
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_STALL, "TC-AI-072 第二拍无新帧");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-AI-073 停摆拍不得沿用上一拍值 -> -2");
|
||||
CHECK(adc_input_raw(ADC_SEM_UC, &v) == -2, "TC-AI-074 停摆拍连其它 STM32 通道也不得出数");
|
||||
CHECK(adc_input_raw(ADC_SEM_TEMP, &v) == -2, "TC-AI-074B 同上(TEMP 亦 -2)");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_STALL, "TC-ADCIN-072 第二拍无新帧");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-ADCIN-073 停摆拍不得沿用上一拍值 -> -2");
|
||||
CHECK(adc_input_raw(ADC_SEM_UC, &v) == -2, "TC-ADCIN-074 停摆拍连其它 STM32 通道也不得出数");
|
||||
CHECK(adc_input_raw(ADC_SEM_TEMP, &v) == -2, "TC-ADCIN-074B 同上(TEMP 亦 -2)");
|
||||
|
||||
dma_beat(200);
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-AI-075 第三拍恢复成功");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 208), "TC-AI-076 恢复拍重新可取数(自愈)");
|
||||
CHECK(stm32_take() == ADC_INPUT_RC_OK, "TC-ADCIN-075 第三拍恢复成功");
|
||||
CHECK((adc_input_raw(ADC_SEM_UB, &v) == 0) && (v == 208), "TC-ADCIN-076 恢复拍重新可取数(自愈)");
|
||||
|
||||
/* --- 挂载失败支路:同样不得沿用(init 失败后整层无有效数据) --- */
|
||||
fakes_reset();
|
||||
s_start_dma_rc = HAL_ERROR;
|
||||
(void)adc_input_init();
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-AI-078 挂载失败后不得取到任何值 -> -2");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-ADCIN-078 挂载失败后不得取到任何值 -> -2");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-040..045:raw 参数守卫与无数据 ===================== */
|
||||
/* ===================== TC-ADCIN-040..045:raw 参数守卫与无数据 ===================== */
|
||||
|
||||
static void tc_raw_guards(void) {
|
||||
int32_t v = 0;
|
||||
@@ -442,15 +442,15 @@ static void tc_raw_guards(void) {
|
||||
fakes_reset();
|
||||
(void)adc_input_init();
|
||||
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, NULL) == -1, "TC-AI-040 out=NULL -> -1");
|
||||
CHECK(adc_input_raw(ADC_SEM_COUNT, &v) == -1, "TC-AI-041 ch 越界 -> -1");
|
||||
CHECK(adc_input_raw((adc_semantic_t)(-1), &v) == -1, "TC-AI-042 ch 负数 -> -1");
|
||||
CHECK(v == 0, "TC-AI-043 参数错时不写 out");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-AI-044 TPAFE 无有效帧 -> -2");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-AI-045 STM32 无有效扫描 -> -2");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, NULL) == -1, "TC-ADCIN-040 out=NULL -> -1");
|
||||
CHECK(adc_input_raw(ADC_SEM_COUNT, &v) == -1, "TC-ADCIN-041 ch 越界 -> -1");
|
||||
CHECK(adc_input_raw((adc_semantic_t)(-1), &v) == -1, "TC-ADCIN-042 ch 负数 -> -1");
|
||||
CHECK(v == 0, "TC-ADCIN-043 参数错时不写 out");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-ADCIN-044 TPAFE 无有效帧 -> -2");
|
||||
CHECK(adc_input_raw(ADC_SEM_UB, &v) == -2, "TC-ADCIN-045 STM32 无有效扫描 -> -2");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-046..04B:raw TPAFE 取数与补码 ===================== */
|
||||
/* ===================== TC-ADCIN-046..04B:raw TPAFE 取数与补码 ===================== */
|
||||
|
||||
static void tc_raw_tpafe(void) {
|
||||
int32_t v = 0;
|
||||
@@ -468,16 +468,16 @@ static void tc_raw_tpafe(void) {
|
||||
s_fake_tpafe[7] = 1007;
|
||||
s_snapshot_rc = 1;
|
||||
|
||||
CHECK(adc_input_poll() == 1, "TC-AI-046 poll 透传 TPAFE 快照码 1");
|
||||
CHECK(s_snapshot_count == (uint8_t)ADC_INPUT_TPAFE_CH_NUM, "TC-AI-047 快照请求 8 通道");
|
||||
CHECK(s_snapshot_dst != NULL, "TC-AI-048 快照目的缓冲非空");
|
||||
CHECK((adc_input_raw(ADC_SEM_UA, &v) == 0) && (v == 3006), "TC-AI-049 UA -> buf[6]=3006");
|
||||
CHECK((adc_input_raw(ADC_SEM_UN, &v) == 0) && (v == 2005), "TC-AI-04A UN -> buf[5]=2005");
|
||||
CHECK(adc_input_poll() == 1, "TC-ADCIN-046 poll 透传 TPAFE 快照码 1");
|
||||
CHECK(s_snapshot_count == (uint8_t)ADC_INPUT_TPAFE_CH_NUM, "TC-ADCIN-047 快照请求 8 通道");
|
||||
CHECK(s_snapshot_dst != NULL, "TC-ADCIN-048 快照目的缓冲非空");
|
||||
CHECK((adc_input_raw(ADC_SEM_UA, &v) == 0) && (v == 3006), "TC-ADCIN-049 UA -> buf[6]=3006");
|
||||
CHECK((adc_input_raw(ADC_SEM_UN, &v) == 0) && (v == 2005), "TC-ADCIN-04A UN -> buf[5]=2005");
|
||||
CHECK((adc_input_raw(ADC_SEM_IA, &v) == 0) && (v == -1234),
|
||||
"TC-AI-04B IA -> buf[2]=-1234(补码负值原样保留)");
|
||||
"TC-ADCIN-04B IA -> buf[2]=-1234(补码负值原样保留)");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-050..058:poll 契约 ===================== */
|
||||
/* ===================== TC-ADCIN-050..058:poll 契约 ===================== */
|
||||
|
||||
static void tc_poll(void) {
|
||||
int32_t v = 0;
|
||||
@@ -487,16 +487,16 @@ static void tc_poll(void) {
|
||||
(void)adc_input_init();
|
||||
s_snapshot_rc = 0;
|
||||
dma_beat(100);
|
||||
CHECK(adc_input_poll() == 0, "TC-AI-050 快照无新帧 -> poll 返回 0");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-AI-051 无新帧时 TPAFE 侧无效");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_OK, "TC-AI-052 同拍 STM32 取帧照常执行");
|
||||
CHECK(adc_input_poll() == 0, "TC-ADCIN-050 快照无新帧 -> poll 返回 0");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-ADCIN-051 无新帧时 TPAFE 侧无效");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_OK, "TC-ADCIN-052 同拍 STM32 取帧照常执行");
|
||||
|
||||
/* --- 参数错(-1):返回 -1,TPAFE 无效 --- */
|
||||
fakes_reset();
|
||||
(void)adc_input_init();
|
||||
s_snapshot_rc = -1;
|
||||
CHECK(adc_input_poll() == -1, "TC-AI-053 快照参数错 -> poll 返回 -1");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-AI-054 参数错时 TPAFE 侧无效");
|
||||
CHECK(adc_input_poll() == -1, "TC-ADCIN-053 快照参数错 -> poll 返回 -1");
|
||||
CHECK(adc_input_raw(ADC_SEM_UA, &v) == -2, "TC-ADCIN-054 参数错时 TPAFE 侧无效");
|
||||
|
||||
/* --- 已有有效帧后再"无新帧":保持上次有效值(不清零) --- */
|
||||
fakes_reset();
|
||||
@@ -507,7 +507,7 @@ static void tc_poll(void) {
|
||||
s_snapshot_rc = 0;
|
||||
(void)adc_input_poll();
|
||||
CHECK((adc_input_raw(ADC_SEM_UA, &v) == 0) && (v == 777),
|
||||
"TC-AI-055 已有有效帧后无新帧不清零");
|
||||
"TC-ADCIN-055 已有有效帧后无新帧不清零");
|
||||
|
||||
/* --- STM32 失败不阻断 TPAFE、不影响 poll 返回值 --- */
|
||||
fakes_reset();
|
||||
@@ -515,36 +515,36 @@ static void tc_poll(void) {
|
||||
s_fake_tpafe[2] = 55;
|
||||
s_snapshot_rc = 1;
|
||||
/* 不注入任何 DMA 完成 = STM32 侧停摆 */
|
||||
CHECK(adc_input_poll() == 1, "TC-AI-056 STM32 停摆不影响 poll 返回值(仍为 1)");
|
||||
CHECK(adc_input_poll() == 1, "TC-ADCIN-056 STM32 停摆不影响 poll 返回值(仍为 1)");
|
||||
CHECK((adc_input_raw(ADC_SEM_IA, &v) == 0) && (v == 55),
|
||||
"TC-AI-057 STM32 停摆不影响 TPAFE 取数");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_STALL, "TC-AI-058 STM32 停摆另由状态码暴露");
|
||||
"TC-ADCIN-057 STM32 停摆不影响 TPAFE 取数");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_STALL, "TC-ADCIN-058 STM32 停摆另由状态码暴露");
|
||||
}
|
||||
|
||||
/* ===================== TC-AI-060..066:rc / errs 观测 ===================== */
|
||||
/* ===================== TC-ADCIN-060..066:rc / errs 观测 ===================== */
|
||||
|
||||
static void tc_rc_errs(void) {
|
||||
fakes_reset();
|
||||
(void)adc_input_init();
|
||||
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_NOT_RUN, "TC-AI-060 init 后未扫描 = NOT_RUN(-3)");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-AI-061 init 后失败计数 = 0");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_NOT_RUN, "TC-ADCIN-060 init 后未扫描 = NOT_RUN(-3)");
|
||||
CHECK(adc_input_stm32_errs() == 0u, "TC-ADCIN-061 init 后失败计数 = 0");
|
||||
|
||||
dma_beat(100);
|
||||
(void)stm32_take(); /* 成功 */
|
||||
CHECK((adc_input_stm32_rc() == ADC_INPUT_RC_OK) && (adc_input_stm32_errs() == 0u),
|
||||
"TC-AI-062 成功: rc=OK 且 errs 不变");
|
||||
"TC-ADCIN-062 成功: rc=OK 且 errs 不变");
|
||||
|
||||
(void)stm32_take(); /* 停摆 1(单拍 = 相位伪影,不计) */
|
||||
(void)stm32_take(); /* 停摆 2 -> 计 1 */
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-AI-063 连续两拍停摆累计 = 1");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_STALL, "TC-AI-064 rc = 最近一次(STALL)");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-ADCIN-063 连续两拍停摆累计 = 1");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_STALL, "TC-ADCIN-064 rc = 最近一次(STALL)");
|
||||
|
||||
dma_beat(200);
|
||||
(void)stm32_take(); /* 恢复成功 */
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_OK, "TC-AI-065 恢复成功后 rc=OK");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-AI-066 errs 单调递增(不因成功回落)");
|
||||
CHECK(adc_input_stm32_seq() == 2u, "TC-AI-067 seq 只由 DMA 完成回调推进");
|
||||
CHECK(adc_input_stm32_rc() == ADC_INPUT_RC_OK, "TC-ADCIN-065 恢复成功后 rc=OK");
|
||||
CHECK(adc_input_stm32_errs() == 1u, "TC-ADCIN-066 errs 单调递增(不因成功回落)");
|
||||
CHECK(adc_input_stm32_seq() == 2u, "TC-ADCIN-067 seq 只由 DMA 完成回调推进");
|
||||
}
|
||||
|
||||
/* ===================== main ===================== */
|
||||
|
||||
Reference in New Issue
Block a user