ST Cortex M3 デバイスでサーバーを作成しています。lwip API と FreeRTOS を使用しています。すべてが機能していますが、応答時間はかなりずれています。現在、lwip 1.3.2 と FreeRTOS 7.3 を使用しています。
単一のクライアントがサーバーに接続し、タイムクリティカルなデータを頻繁に送信する必要があります。これらのパケットは 6 バイト程度です。それ以外の場合は、20K 以上を送ります。
私が抱えている問題は、これらの小さなパケットが送信されるのに永遠にかかるように見えることです. これは、lwip がより効率的な送信を行うために、より多くのデータがキューに入れられるのを待っているためだと思います。データが送信されるまで 2 ~ 3 秒待つことはできません。クライアントは、名目上数マイクロ秒またはミリ秒でデータを期待しています。
lwip_send と lwip_write を使用してみました。(一方が他方と同じで、最後にフラグが渡されることを理解しています。試してみる必要がありました...) ソケットに TCP_NODELAY を設定しようとしましたが、役に立ちませんでした。SO_SNDLOWAT を '1' に設定しようとしましたが、これは常に -1 を返すため、サポートされていないと思います。
TCP RAW を使用してすべてのコードをやり直したくありません。TCP RAW モード以外で tcp_output() 関数を呼び出す方法はありますか? 物事をスピードアップする方法はありますか、それとも小さなパケットで lwip TCP がどれだけ遅いのでしょうか?
あらゆる提案を歓迎します。ありがとう。
--EDIT-- また、送信の準備ができたら、FreeRTOS の TX タスクが最高の優先度であることを確認します。lwip_send/write を呼び出す時点まで、他のタスクは実行されていません。