器件型号: J784S4XEVM
您好:
我目前正在 J784S4_EVM 环境中使用 lwIP 测试 TCP 客户端实施。
现有的 TCP 服务器实现工作正常。 当只有 TCP 服务器正在运行时、ping 工作正常。
但是、当我添加 TCP 客户端线程并调用 netconn_connect() 或 lwip_connect()时、系统似乎挂起、ping 停止响应。
行为如下:
-
网络接口启动成功。
-
建立链路后、ping 立即起作用。
-
只要 TCP 客户端尝试连接、ping 就会停止响应。
-
系统在连接阶段似乎停止运行。
示例日志:
Network interface is ready. Starting TCP Client.
TCP client connecting to 192.168.70.142:50001
此日志后、不再打印任何日志、ping 也不再起作用。
我首先使用 netconn API 进行测试:
conn = netconn_new(NETCONN_TCP);
err = netconn_connect(conn, &server_ip, TCP_CLIENT_SERVER_PORT);
系统在期间似乎挂起 netconn_connect()、ping 也停止。
然后、我更改了实现、将 lwIP 套接字 API 与非阻塞连接结合使用、并 select():
sock = lwip_socket(AF_INET, SOCK_STREAM, 0);
lwip_fcntl(sock, F_SETFL, flags | O_NONBLOCK);
ret = lwip_connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
但是、结果是相同的。 日志在尝试连接后立即停止、ping 停止响应。
TCP 客户端线程是使用创建的 sys_thread_new():
sys_thread_new("tcpipv4_client_thread",
tcpipv4_client_thread,
NULL,
DEFAULT_THREAD_STACKSIZE,
DEFAULT_THREAD_PRIO);
lwIP tcpip_thread 也是使用 sys_thread_new() 内部创建的 tcpip_init():
sys_thread_new(TCPIP_THREAD_NAME,
tcpip_thread,
NULL,
TCPIP_THREAD_STACKSIZE,
TCPIP_THREAD_PRIO);
我怀疑 TCP 客户端线程优先级可能会干扰 tcpip_thread 或以太网 RX/lwIP 处理线程。
作为参考、TCP 服务器使用类似的线程创建方法正常工作、但该问题仅在 TCP 客户端尝试连接时发生。
谢谢你。
No valid MAC address found in EEPROM, falling back to static address
EnetMcm: CPSW_2G on MCU NAVSS
PHY 0 is alive
EnetPhy_bindDriver: PHY 0: OUI:080028 Model:23 Ver:01 <-> 'dp83867' : OK
Host MAC address: 70:ff:76:1d:92:c1
[LWIPIF_LWIP] Enet LLD netif initialized successfully
Enet lwIP App: Added Network IP address I/F ti0: 192.168.70.210
Waiting for network interface to come UP...
IPC_MPU1_0 Start...
IPC_Setup done .....
mcu1_0 <--> mcu2_0, Ready Completed
mcu1_0 <--> mcu2_1, Ready Completed
mcu1_0 <--> mcu3_0, Ready Completed
mcu1_0 <--> mcu3_1, Ready Completed
mcu1_0 <--> mcu4_0, Ready Completed
mcu1_0 <--> mcu4_1, Ready Completed
All tests have passed
Cpsw_handleLinkUp: Port 1: Link up: 1-Gbps Full-Duplex
MAC Port 1: link up
Network interface is ready. Starting TCP Client.
TCP client connecting to 192.168.70.142:50001