Embedded LwIP Netconn API-检查TCP通信是否已完成
我目前正在为特定用例创建测试,其中之一是Init WF200->connect to AP->send TCP data->Deinit WF200。该应用程序非常节能,因此我必须确保WF200的启用时间尽可能短。 我使用的硬件是EFM32GG11 MCU和WF200 WIFI收发器,两者都来自SiliconLabs。我将RTOS和lwip堆栈与netconn API一起用于TCP通信 问题是我找不到一种方法来知道TCP事务是否已完成,我需要在关闭WF200之前知道这一点。目前,该任务比实际传输速度更快,从而导致数据丢失和TCP通信不完整 目前,我有一个工作,这是增加了延迟。但对我来说,这似乎不是一个优雅的解决方案,特别是因为延迟取决于发送的数据量 我已经尝试检查tcp pcb状态,但没有成功。是否有某种方法可以阻止线程,直到事务完成 提前谢谢Embedded LwIP Netconn API-检查TCP通信是否已完成,embedded,rtos,lwip,Embedded,Rtos,Lwip,我目前正在为特定用例创建测试,其中之一是Init WF200->connect to AP->send TCP data->Deinit WF200。该应用程序非常节能,因此我必须确保WF200的启用时间尽可能短。 我使用的硬件是EFM32GG11 MCU和WF200 WIFI收发器,两者都来自SiliconLabs。我将RTOS和lwip堆栈与netconn API一起用于TCP通信 问题是我找不到一种方法来知道TCP事务是否已完成,我需要在关闭WF200之前知道这一点。目前,该任务比实际传输
static void tcp_thread(void *p_arg) {
struct netconn *conn;
err_t err;
LWIP_UNUSED_ARG(p_arg);
// needed, otherwise netconn_connect fails
KAL_Dly(1);
conn = netconn_new(NETCONN_TCP);
if (conn != NULL) {
struct ip4_addr broker_ip;
IP_ADDR4(&broker_ip, SERVER_IP_0, SERVER_IP_1, SERVER_IP_2, SERVER_IP_3);
err = netconn_connect(conn, &broker_ip, 65432);
if (err == ERR_OK) {
// NOCOPY only safe when data is static and const
err = netconn_write(conn, test_data, strlen(test_data), NETCONN_NOCOPY);
printf("Data sent\n");
netconn_close(conn);
netconn_delete(conn);
} else {
printf("No TCP connection\n");
}
} else {
printf("No netconn\n");
}
KAL_Dly(200);
sl_wfx_deinit();
OSTaskDel(0, &err);
}
netconn将执行回调,您可以将while(1){osDelay(2);}添加到代码中,并等待回调完成。也许在回调中发布一个标志,您可以检查。例如,您可以使用该数据接收回调(或错误回调等),检查确认,然后写入可以在代码的while循环中检查的var。请更好地格式化您的答案。请阅读以改进答案的格式。