Files
STM32F4-Base/test/ch395f_test.h
T
2026-08-24 16:16:18 +08:00

106 lines
4.3 KiB
C
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.
/*
* 模块名称:CH395F Driver Test Suite
* 模块功能:CH395F 驱动各功能模块的测试入口,分阶段组织测试用例,
* 覆盖 SPI 命令路径、协议栈配置、Socket 状态机、大文件传输、
* 边界条件、KeepAlive、PHY 链路恢复等,基于单连接 socket 模式
* 适用平台:STM32F4 系列(CH395F 以太网芯片)
* 作者:王建锋
* 创建日期:2026-07-19
* 修改记录:
* 2026-07-22 全面重构为单连接模式,增加大文件传输、边界条件等测试
*
* === 测试阶段一览(硬件层 1~5 → NET 层 6~10,严格顺序执行) ===
* Phase | 层 | 描述
* ---------|----------|-----------------------------------------------
* Phase 1 | 硬件层 | 独立运行:寄存器读写 + SPI 命令路径验证
* Phase 2 | 硬件层 | PC 配合:TCP Client 收发 + 关闭重连
* Phase 3 | 硬件层 | PC 配合:UDP Server Echo(60 轮动态源地址回显,HELLO 探针不计数)
* Phase 4 | 硬件层 | PC 配合:DHCP 自动获取 IP
* Phase 5 | 硬件层 | PC 配合:大文件分块回传(裸命令,tcp_server 配合)
* Phase 6 | NET 层 | testTask:TCP Echo(单连接模式,基础收发验证)
* Phase 7 | NET 层 | testTask:大文件传输(20KB+ 分块收发)
* Phase 8 | NET 层 | testTask:Select/Poll I/O 多路复用
* Phase 9 | NET 层 | testTask:边界条件测试(零长度、DMA 边界、缓冲溢出)
* Phase 10 | NET 层 | testTask:KeepAlive 超时断开测试
*/
#ifndef __CH395F_TEST_H
#define __CH395F_TEST_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/*
* 阶段使能开关(取消注释即启用对应阶段)
*
* 构建模式互斥(详见 docs/CH395F_Test_Guide.md「构建模式与执行顺序」):
* 硬件层模式(阶段 1~5):netTask 不创建,ch395fTestTask 独占 CH395F
* NET 层模式 (阶段 6~10):完整网络栈,netTask 轮询 + ch395fTestTask 监听循环
*
* 注意:同层内可多选(Phase 6~10 共享 testTask 循环);
* Phase 4 (DHCP) 会改变 IP,必须独立运行;
* 两层同时启用会在下方触发 #error。
*/
/* ---- 硬件层(阶段 1~5)---- */
//#define ENABLE_PHASE1_TESTS /* [硬] 寄存器读写 + SPI 命令路径 */
//#define ENABLE_PHASE2_TESTS /* [硬] TCP Client 收发 + 关闭重连 */
//#define ENABLE_PHASE3_TESTS /* [硬] UDP Server Echo */
//#define ENABLE_PHASE4_TESTS /* [硬] DHCP 自动获取 IP(会改 IP!独立运行) */
#define ENABLE_PHASE5_TESTS /* [硬] 大文件传输(硬件层,PC 配合) */
/* ---- NET 层(阶段 6~10)---- */
//#define ENABLE_PHASE6_TESTS /* [网] TCP Echo(单连接基础收发) */
//#define ENABLE_PHASE7_TESTS /* [网] 大文件传输(20KB+ 分块) */
//#define ENABLE_PHASE8_TESTS /* [网] Select/Poll I/O 多路复用 */
//#define ENABLE_PHASE9_TESTS /* [网] 边界条件测试 */
//#define ENABLE_PHASE10_TESTS /* [网] KeepAlive 超时断开测试 */
#if defined(ENABLE_PHASE1_TESTS) || defined(ENABLE_PHASE2_TESTS) || \
defined(ENABLE_PHASE3_TESTS) || defined(ENABLE_PHASE4_TESTS) || \
defined(ENABLE_PHASE5_TESTS)
#define ENABLE_HW_LAYER_TESTS 1
#endif
#if defined(ENABLE_PHASE6_TESTS) || defined(ENABLE_PHASE7_TESTS) || \
defined(ENABLE_PHASE8_TESTS) || defined(ENABLE_PHASE9_TESTS) || \
defined(ENABLE_PHASE10_TESTS)
#define ENABLE_NET_LAYER_TESTS 1
#endif
#if defined(ENABLE_HW_LAYER_TESTS) && defined(ENABLE_NET_LAYER_TESTS)
#error "硬件层(1~5)与NET层(6~10)测试互斥:请分两次构建,见 CH395F_Test_Guide 构建模式与执行顺序"
#endif
/* 测试统计 */
typedef struct {
uint16_t total;
uint16_t passed;
uint16_t failed;
} test_stats_t;
extern test_stats_t g_test_stats;
#define TEST_CHECK(cond, fmt, ...) do { \
g_test_stats.total++; \
if (cond) { \
g_test_stats.passed++; \
DBG_INFO("[PASS] " fmt, ##__VA_ARGS__); \
} else { \
g_test_stats.failed++; \
DBG_ERROR("[FAIL] " fmt, ##__VA_ARGS__); \
} \
} while (0)
#define TEST_REPORT(name) do { \
DBG_INFO("=== %s: %d/%d PASSED (failed=%d) ===", \
name, g_test_stats.passed, g_test_stats.total, g_test_stats.failed); \
} while (0)
#ifdef __cplusplus
}
#endif
#endif /* __CH395F_TEST_H */