通过同一连接在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。