Files
STM32F4-Base/test/ch395f_test.h
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 Echo60 轮动态源地址回显HELLO 探针不计数)
* Phase 4 | 硬件层 | PC 配合DHCP 自动获取 IP
* Phase 5 | 硬件层 | PC 配合大文件分块回传裸命令tcp_server 配合)
* Phase 6 | NET 层 | testTaskTCP Echo单连接模式基础收发验证
* Phase 7 | NET 层 | testTask大文件传输20KB+ 分块收发)
* Phase 8 | NET 层 | testTaskSelect/Poll I/O 多路复用
* Phase 9 | NET 层 | testTask边界条件测试零长度、DMA 边界、缓冲溢出)
* Phase 10 | NET 层 | testTaskKeepAlive 超时断开测试
*/
#ifndef __CH395F_TEST_H
#define __CH395F_TEST_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/*
* 阶段使能开关(取消注释即启用对应阶段)
*
* 构建模式互斥(详见 docs/CH395F_Test_Guide.md「构建模式与执行顺序」
* 硬件层模式(阶段 1~5netTask 不创建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 */