通过同一连接在LwIP中发送和接收UDP数据包?

问题描述:

我正在开发一个应用程序,它应该能够异步地发送和接收具有相同端口号的UDP消息,并且对这样做的最佳方式有点困惑。我在STM32平台上使用LwIP和FreeRTOS,并且想要使用netconn api。通过同一连接在LwIP中发送和接收UDP数据包?

我的应用程序应该:

  • 一定ISR火灾后发送消息。我有它的设置,所以ISR释放一个信号量,这是我的UDP任务消耗。
  • 接收消息的时间

如果我在Linux上开发这个,我觉得它会是有意义的有发送一个线程和一个接收,或者可能使用select操作系统调用。据我所知,这些对于LwIP来说都是不可行的。

我想到的唯一选择是在我的UDP任务中做这样的事情。

void my_task(void) 
{ 
    // setup netconn connection here 
    netconn_set_recvtimeout(conn, 1); 

    while (1) 
    { 
     // Only wait 1ms to take the semaphore 
     if(xSemaphoreTake(isr_semaphore, 1) == pdTRUE) 
     { 
      netconn_send(conn, nbuf); 
     } 

     // Only block for 1ms to receive a UDP message 
     if(netconn_recv(conn, mybuf) == ERR_OK) 
     { 
      //process incoming data 
     } 
    } 
} 

但是,这对我来说似乎相当不合适,因为我为每次通话浪费了1ms。有没有更好的方法来实现相同的目标?我觉得这一定是一个非常普遍的要求,但我没有看到这方面的任何例子。

由于LWIP文档提到netconn API是顺序的,因此阻塞了API。
如果你想使它异步,你应该使用基于回调的原始API。