2

組み込みデバイス用のFreeRTOSでLwIPを使用してCプログラムを作成しています。マイクロコントローラーは Atmel AVR32 です。

LwIPでは、 でudp受信コールバック関数を設定した後、 UDPデータグラムを受信udp_recv()するとコールバック関数が呼び出されることがわかりました。次に、コールバック関数内で次のようなことができます。しかし、コールバック関数が終了する前に別のUDPパケットを受信した場合、この 2 番目のパケットはバッファにキューイングされますか? または、最初のコールバック関数が終了していなくても、コールバック関数がすぐに再度呼び出されますか?process_udp_packet()

どうもありがとうございました。

4

1 に答える 1

4

コールバックは、LwIP 自体のコンテキストで呼び出されます。したがって、コールバックを終了するまで、LwIP はブロックされます。新しいパケットはまったく処理されません。新しいデータが到着する場合、LwIP のブロックが解除されるまで、インターフェイス ドライバーはインターフェイス (モデムなど) からデータを読み取ったり、独自のバッファーに保存したりしないでください。

そのため、通常の LwIP ワークフローを妨害しないように、コールバックはできるだけ早く終了する必要があります。このようなコールバック関数のプログラミングにおける最善の方法は、新しいパケットをアプリ キューに読み込み、コールバックからすぐに戻ることです。その後、アプリは独自のコンテキストで新しいデータを処理できます。

ただし、データ処理が非常に高速である場合は、コールバック関数内で実行できます。

于 2012-04-10T17:08:37.503 に答える