2

我正在使用LwIPFreeRTOS为嵌入式设备编写C程序,微控制器是 Atmel AVR32。

LwIP中,通过设置udp接收回调函数后udp_recv(),我知道一旦接收到UDP数据报就会调用回调函数。process_udp_packet()然后我可以在回调函数内部做一些事情。但是,如果在回调函数完成之前收到另一个UDP数据包,这第二个数据包会在缓冲区中排队吗?还是立即再次调用回调函数,连第一个回调函数都没有完成?

非常感谢你。

4

1 回答 1

4

回调是在 LwIP 本身的上下文中调用的。因此,在您退出回调之前,LwIP 将被阻止。它根本不会处理任何新数据包。如果有新数据到达,接口驱动程序不应从接口(如调制解调器)读取它或将其保存在自己的缓冲区中,直到 LwIP 被解除阻塞。

因此,回调应尽快退出,以免干扰正常的 LwIP 工作流程。编写此类回调函数的最佳方法是将新数据包读入应用程序队列并立即从回调中返回。然后应用程序在它自己的上下文中可以处理新数据。

但是,如果数据处理速度非常快,您可以在回调函数中完成。

于 2012-04-10T17:08:37.503 回答