freeRTOS支持
This commit is contained in:
@@ -6,6 +6,19 @@
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-07-19
|
||||
* 修改记录:
|
||||
*
|
||||
* === 通过标准速查 ===
|
||||
*
|
||||
* Phase | 通过条件 | 失败特征
|
||||
* ---------|-----------------------------------|--------------------------------
|
||||
* Phase 1 | 9 项全部打印 OK/SUCCESS/YES/0x00 | 任何一项显示 FAIL、ERROR、MISMATCH
|
||||
* Phase 2 | 3 轮 "PASS" 打印 | 任何一轮打印 "FAIL" 或超时
|
||||
* Phase 3 | 20/20 回显 + PING 5/5 + 大包 10/10 | 任何回显超时或丢包
|
||||
* Phase 4 | PC 脚本显示 10/10 sent/received | 断连、数据错乱
|
||||
* Phase 5 | PC 脚本显示 10/10 sent/received | 断连、数据错乱
|
||||
* Phase 6 | 日志打印 IP/GW/MASK 非零 IP | DHCP timeout 或 0.0.0.0
|
||||
* Phase 7 | PC 脚本显示 10/10 sent/received | 断连、数据错乱
|
||||
* Phase 8 | 70/70 成功率 100% | 任何连接失败或丢包
|
||||
*/
|
||||
|
||||
#ifndef __CH395F_TEST_H
|
||||
@@ -15,6 +28,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* 阶段使能开关(取消注释即启用对应阶段)
|
||||
* 注意:Phase 6 (DHCP) 会改变 IP,建议独立运行
|
||||
@@ -22,58 +37,97 @@ extern "C" {
|
||||
//#define ENABLE_PHASE1_TESTS /* 寄存器读写 + 中断一致性 */
|
||||
//#define ENABLE_PHASE2_TESTS /* TCP Client 收发 + 关闭重连 */
|
||||
//#define ENABLE_PHASE3_TESTS /* UDP Server Echo */
|
||||
//#define ENABLE_PHASE4_TESTS /* NET 层 TCP Echo(需主循环调用) */
|
||||
//#define ENABLE_PHASE5_TESTS /* NET 层 UDP Echo(需主循环调用) */
|
||||
#define ENABLE_PHASE4_TESTS /* NET 层 TCP Echo(netTask 中运行) */
|
||||
//#define ENABLE_PHASE5_TESTS /* NET 层 UDP Echo(netTask 中运行) */
|
||||
//#define ENABLE_PHASE6_TESTS /* DHCP 自动获取 IP(会改 IP!) */
|
||||
//#define ENABLE_PHASE7_TESTS /* Select/Poll I/O 多路复用 */
|
||||
//#define ENABLE_PHASE7_TESTS /* Select/Poll I/O 多路复用(netTask 中运行) */
|
||||
|
||||
/* 测试统计 */
|
||||
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)
|
||||
|
||||
/*
|
||||
* Phase 1: 底层寄存器测试(版本、IP、中断、ARP/TTL 等)
|
||||
* 非破坏性,net_init() 后即可运行
|
||||
* Phase 1: 底层寄存器测试
|
||||
* 通过: 9 项全部打印 OK/SUCCESS/YES/0x00
|
||||
* 失败: 任何一项 FAIL/ERROR/MISMATCH
|
||||
*/
|
||||
void ch395f_phase1_tests(void);
|
||||
|
||||
/*
|
||||
* Phase 2: TCP Client 功能测试(3 轮收发 + 关闭重连)
|
||||
* 需 PC 端先运行:
|
||||
* Phase 2: TCP Client 收发 + 关闭重连 ×3 轮
|
||||
* 通过: 日志打印 3 轮 "PASS"
|
||||
* 失败: 任何一轮打印 "FAIL" 或超时
|
||||
* PC 端预启动:
|
||||
* python test/ch395f_socket_test.py tcp_server --port 8081
|
||||
*/
|
||||
void ch395f_phase2_tests(void);
|
||||
|
||||
/*
|
||||
* Phase 3: UDP Server Echo 测试(HELLO 探针 + PING + 大包)
|
||||
* 需 PC 端先运行:
|
||||
* python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000 --timeout 30
|
||||
* Phase 3: UDP Server Echo + PING + 大包
|
||||
* 通过: 20/20 回显 + PING 5/5 + 大包 10/10
|
||||
* 失败: 任何回显超时或丢包
|
||||
* PC 端:
|
||||
* ping 192.168.1.100
|
||||
* python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000
|
||||
*/
|
||||
void ch395f_phase3_tests(void);
|
||||
|
||||
/*
|
||||
* Phase 4: NET 层 TCP Echo(主循环中运行)
|
||||
* 需 PC 端运行(主循环进入后):
|
||||
* Phase 4: NET 层 TCP Echo(netTask 中运行)
|
||||
* 通过: PC 脚本 10/10 sent/received
|
||||
* 失败: 断连或数据错乱
|
||||
* PC 端:
|
||||
* python test/ch395f_socket_test.py tcp_client --ip 192.168.1.100 --port 8080
|
||||
*/
|
||||
void ch395f_phase4_tests(void);
|
||||
|
||||
/*
|
||||
* Phase 5: NET 层 UDP Echo(主循环中运行)
|
||||
* 需 PC 端运行(主循环进入后):
|
||||
* python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000 --timeout 30
|
||||
* 限定条件:需在 USER CODE BEGIN 2 中调用 ch395f_phase5_init() 创建 Socket,
|
||||
* USER CODE BEGIN 3 中调用 ch395f_phase5_tests() 做 echo
|
||||
* Phase 5: NET 层 UDP Echo(netTask 中运行)
|
||||
* 通过: PC 脚本 10/10 sent/received
|
||||
* 失败: 断连或数据错乱
|
||||
* 注:init 在 USER CODE BEGIN 2 中调用,echo 在 netTask 中运行
|
||||
* PC 端:
|
||||
* python test/ch395f_socket_test.py udp_client --ip 192.168.1.100 --port 60000
|
||||
*/
|
||||
void ch395f_phase5_init(void);
|
||||
void ch395f_phase5_tests(void);
|
||||
|
||||
/*
|
||||
* Phase 6: DHCP 测试
|
||||
* 自动获取 IP,打印结果。需独立运行(会改变 IP)
|
||||
* Phase 6: DHCP 自动获取 IP
|
||||
* 通过: DHCP SUCCESS + IP 非零 + 广播宣告 + HELLO 回显
|
||||
* 失败: DHCP timeout 或宣告/HELLO 失败
|
||||
* 注意: 会改变 IP,需独立运行
|
||||
* PC 端:管理员权限
|
||||
* python test/ch395f_socket_test.py dhcp_server --dhcp-iface 192.168.1.2 --ip 192.168.1.100
|
||||
*/
|
||||
void ch395f_phase6_tests(void);
|
||||
|
||||
/*
|
||||
* Phase 7: Select/Poll 测试(主循环中运行)
|
||||
* 使用 net_select() 检测可读 socket,net_recv/net_send 回显
|
||||
* 需 PC 端运行:
|
||||
* Phase 7: Select/Poll 测试(netTask 中运行)
|
||||
* 通过: PC 脚本 10/10 sent/received
|
||||
* 失败: 断连或数据错乱
|
||||
* PC 端:
|
||||
* python test/ch395f_socket_test.py tcp_client --ip 192.168.1.100 --port 8080
|
||||
*/
|
||||
void ch395f_phase7_tests(void);
|
||||
|
||||
Reference in New Issue
Block a user