diff --git a/prj/TCPClient/Middle/QDXnetworkStack/qdx_port.c b/prj/TCPClient/Middle/QDXnetworkStack/qdx_port.c index 627a29a..2836ff1 100644 --- a/prj/TCPClient/Middle/QDXnetworkStack/qdx_port.c +++ b/prj/TCPClient/Middle/QDXnetworkStack/qdx_port.c @@ -428,3 +428,20 @@ void qdx_port_tcp_close(qdx_socket_t sock) ring_init(&ctx->rx_ring); free_sock_ctx(ctx); } + +/* ============================================================ + * WCHNET global lock — exposed for task_wchnet_entry in main.c + * All WCHNET API calls must be serialized through this mutex. + * ============================================================ */ + +void qdx_port_net_lock(void) +{ + if (g_wchnet_mutex) + xSemaphoreTake(g_wchnet_mutex, portMAX_DELAY); +} + +void qdx_port_net_unlock(void) +{ + if (g_wchnet_mutex) + xSemaphoreGive(g_wchnet_mutex); +} diff --git a/prj/TCPClient/User/main.c b/prj/TCPClient/User/main.c index c9c558c..dc1c22d 100644 --- a/prj/TCPClient/User/main.c +++ b/prj/TCPClient/User/main.c @@ -168,6 +168,8 @@ extern void qdx_port_sock_recv_notify(uint8_t sockid); extern void qdx_port_sock_connect_notify(uint8_t sockid); extern void qdx_port_sock_disconnect_notify(uint8_t sockid); extern void qdx_port_init(void); +extern void qdx_port_net_lock(void); +extern void qdx_port_net_unlock(void); void WCHNET_HandleSockInt(u8 socketid, u8 intstat) @@ -247,9 +249,11 @@ static void task_wchnet_entry(void *pvParameters) (void)pvParameters; while (1) { + qdx_port_net_lock(); WCHNET_MainTask(); if (WCHNET_QueryGlobalInt()) WCHNET_HandleGlobalInt(); + qdx_port_net_unlock(); vTaskDelay(pdMS_TO_TICKS(5)); } }