我正在开发一个应该能够异步传输和接收具有相同端口号的UDP消息的应用程序,并且对于执行此操作的最佳方式有点困惑。我在STM32平台上使用LwIP和FreeRTOS,我想使用netconn api。
我的申请应该:
如果我在Linux上开发这个,我认为有一个线程可以发送,一个可以接收,或者可以使用select
OS调用。据我所知,这些都不适用于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。有没有更好的方法来实现同样的目标?我觉得这一定是一个非常普遍的要求,但我没有看到任何这方面的例子。
答案 0 :(得分:0)
由于LWIP文档提到netconn API是顺序的,因此阻止API 如果你想让它异步,你应该使用基于回调的原始API。
答案 1 :(得分:0)
由于您使用的是FreeRTOS,因此请创建两个单独的任务进行发送和接收。将发送任务的优先级设置为高于侦听器的优先级。 换句话说,创建一个客户端和一个服务器任务。