以下の埋め込みTCP/IPスタックのいずれかを使用して、特に良い(または悪い)経験がありますか?
私のニーズは、堅固なeasy-to-portスタックです。コードサイズはそれほど重要ではありませんが、パフォーマンスは比較的重要ですが、使いやすさと移植性は非常に重要です。
システムはおそらく未定のRTOSを使用しますが、私の経験では、ほとんどのスタックはRTOSの有無にかかわらず使用できます。ほとんどの場合、プラットフォームはARMバリアントです(おそらくARM7またはCM3))。
スタックをイーサネットドライバーにボルトで固定することについてはそれほど心配していません。そのため、それは選択の大きな優先事項ではありません。
私は、Linux、RTEMSなどのOSからスタックを抽出することにあまり興味がありません
また、Interniche、Micriumなどの商用製品にも興味はありません...
スタックにはすべての種類のベルとホイッスルは必要ありません。IPv6は必要ありません。スタックの上には何も必要ありません(Webサーバー、FTPサーバーなど)。実際、私はUDPのみを使用しますが、TCPが推奨されるいくつかのシナリオを想定できます。
私が見逃した他のスタックの経験ももちろん非常に興味があります。
あなたの時間と入力をありがとう。
私はuIPとlwIPの両方を広範囲に使用しています。
IP
---(lwIP
編集:
また、RTOSと一緒に使用したことは一度もありませんでした。
lwIPの場合は+1。
数年前のプロジェクトでこれをうまく使用して、一般的に非常に信頼できることがわかりました。プロジェクトに送信したいくつかの問題(通常はTCPコード内のコーナーケース))を見つけて修正しました。それ以降、プロジェクトはかなり進んでいますが、一般的には、機能に欠けていることがわかります。
ご存知のように、RTOSがあってもなくても動作します。異常なDSPコンパイラをサポートするために加えなければならない変更を含む、RTOSを備えたシステムで実行するのに約1週間かかりました。あなたはおそらくARMでGCCを使用しているので、そのような努力を避けることができます。
それはあなたが必要とするよりもはるかに多くの機能を含んでいますが、あなたの要件が数年後に変更される場合は、より充実したスタックから始めたほうがよいでしょう。
lwIP
私は、PPPの上にUDP/IPスタック(TCPなし)が必要な3Gモデムのプロジェクトに取り組みました。 uIPとlwIPに絞り込みました。 PPPが既にある(uIPはそうではない)ため、最後にlwIPを選択しました。また、十分なRAMに余裕がありました。
私たちの特定のプロジェクトはRTOSを使用していませんでした。RTOSなしでlwIPを使用しても問題ありませんでした。
私はlwIPコードの移植に直接関与していませんでしたが、それとインターフェースするためにモデムドライバーに取り組んでいました。私の印象では、以前のTCP/IPの経験があるエンジニアにとって、すべてがスムーズに移行するまでには数週間かかったという印象がありました。 lwIPコードは多くの人々によってハッキングされており、その結果、いくつかの荒削りな部分(たとえば、誰かがどこかで単一のmalloc()を投げ込んだ)を持っていますが、少し調整しただけでうまくいきました。独立した検証スイートでテストしました。
要約すると、UDP/IPおよびPPPのニーズには「適切に機能」していました(ただし、TCP機能)についてはコメントできません)。
lwIPの場合は+1。
Luminary Micros(現在のTI)Serial to Ethernetリファレンスデザインに含まれ、ベアメタル(RTOSなし)で動作するいくつかの追加機能(ある種の「サーバー側スクリプト」とcgi)を備えています。
これは、32KBまたはRAMのみで、非常に堅牢で非常に高性能です。
よろしく
PFM
Stellaris Cortex-M3でのlwipに満足しています。
LM3S6965 evalボード用のStellarisWareには、enet_lwipデモが含まれています。これは、ベアメタルで実行されているlwipで実行されている小さなWebサーバーです。この場合、FreeRTOSはありません。システムは、タイマーとイーサネット割り込みによって駆動されます。ウェブサーバーを引き抜いてアプリにドロップするのはかなり簡単でした。これを初めて実行するために、lwipのエキスパートになる必要はありませんでした。
その後、私のアプリは本質的にアップコール主導型であることに気付きました。最初は、ソケットとアップコールのガスケットがありました。そのレイヤーを、lwipネイティブアップコールをアプリのアップコールに変換するはるかに単純なレイヤーに置き換え、lwipのソケットAPIを選択しました。これにより、より多くのフラッシュとRAM=スペースが節約され、全体がより速く簡単になりました。少し調整するだけで、52Kフラッシュと30K RAMを使用してS2Eボードで実行しました。
オープンソース FNET TCP/IPスタック を試すことができます。
RTOSでinternicheを使用しました。それは本格的なスタックであり、かなりの数の機能をサポートしています。非商用バージョンを探しているので、私の投票はlwIPです。
Microchip TCP/IPスタックを使用しました。とても満足しています。実装は非常に簡単で、多数のデモコード/チュートリアルが利用可能で、HTTP、tFTP、SMTP、SNTPなどの多くのプロトコルをサポートしています。ただし、要件に一致しない点は、簡単に移植できないことです。別のアーキテクチャに。実際、MicrochipはPIC18、PIC24、PIC32のハードウェアのみを使用してスタックを実行することを望んでいるため、スタックのライセンスではこれを明示的に禁止していると思います。ただし、ENC28J60でこのスタックの特定の部分を使用できるようにする外部イーサネットコントローラーがあります。