2009-07-21 12 views
31

Hat jemand besonders gute (oder schlechte) Erfahrungen mit einem der folgenden eingebetteten TCP/IP-Stacks?Erfahrungen mit (freien) eingebetteten TCP/IP-Stacks?

für eine solide Meine Bedürfnisse sind, einfach zu Port Stack. Code-Größe ist nicht sehr wichtig, die Leistung ist relativ wichtig, aber die Benutzerfreundlichkeit & Portierung ist sehr wichtig.

Das System wird wahrscheinlich ein RTOS verwenden, das wurde nicht entschieden, aber meiner Erfahrung nach können die meisten Stacks mit oder ohne RTOS verwendet werden. Höchstwahrscheinlich wird die Plattform eine ARM-Variante (aller Wahrscheinlichkeit nach ARM7 oder CM3) sein.

Nicht zu sehr besorgt über das Verschrauben des Stacks mit dem Ethernet-Treiber, so dass dies keine große Priorität in der Auswahl ist.

Ich bin nicht sehr daran interessiert, einen Stapel aus einem O zu extrahieren, wie Linux, RTEMS usw.

Ich bin auch kein Interesse an kommerziellen Angeboten wie Interniche, Micrium usw. ..

Der Stapel braucht nicht alle Arten von Glocken & pfeift, braucht nicht IPv6, und ich brauche keine Sachen darüber (Webserver, FTP-Server, etc ..) In der Tat Es ist möglich, dass ich nur UDP verwende, obwohl ich mir ein paar Szenarien vorstellen kann, in denen TCP vorzuziehen wäre.

Erfahrungen mit anderen Stacks, die ich verpasst habe, sind natürlich auch sehr interessant.

Danke für Ihre Zeit & Eingabe.

Antwort

8

lwIP

arbeitete ich an einem Projekt mit einem 3G-Modem, wo wir ein UDP/IP-Stack benötigt (kein TCP) auf der PPP. Wir haben uns auf uIP und lwIP beschränkt. Wir haben am Ende lwIP ausgewählt, weil es bereits PPP hatte (uIP nicht), und wir hatten genug RAM übrig.

Unser spezielles Projekt verwendete kein RTOS, und lwIP war in Ordnung, ohne ein RTOS zu verwenden.

Ich war nicht direkt an der Portierung des LWIP-Codes beteiligt, obwohl ich an dem Modemtreiber arbeitete, um mit ihm zu kommunizieren. Mein Eindruck war, dass die Portierung ein paar Wochen in Anspruch nahm, um alles reibungslos zu erledigen, für unseren Techniker, der bereits Erfahrung mit TCP/IP hatte. Der lwIP-Code wurde von vielen Leuten gehackt und hat daher einige Ecken und Kanten (z. B. hat jemand irgendwo einen einzelnen malloc() geworfen), aber es funktionierte für uns nach ein wenig Feinabstimmung. Wir haben es mit einer unabhängigen Validierungs-Suite getestet.

Zusammenfassend war es "geeignet funktional" für unsere UDP/IP und PPP-Anforderungen (aber ich kann seine TCP-Fähigkeiten nicht kommentieren).

+1

Ehrfürchtig, danke für Ihre Eingabe ... – Dan

11

+1 für lwIP.

Wir haben dies erfolgreich in einem Projekt vor ein paar Jahren verwendet und fanden es allgemein sehr zuverlässig. Wir haben ein paar Probleme gefunden und behoben (in der Regel Eckfälle innerhalb des TCP-Codes), die wir zurück an das Projekt gesendet haben, und obwohl das Projekt seither ziemlich weit fortgeschritten ist, fanden wir es im Allgemeinen nicht an irgendwelchen Features fehlen.

Wie Sie vermuten, wird es mit oder ohne ein RTOS funktionieren. Es dauerte ungefähr eine Woche, um mit einem RTOS auf unserem System zu laufen, was Änderungen beinhaltete, die wir machen mussten, um einen ungewöhnlichen DSP-Compiler zu unterstützen. Da Sie wahrscheinlich GCC auf ARM verwenden, können Sie diesen Aufwand vermeiden.

Es enthält viel mehr Funktionen, als Sie benötigen, aber wenn sich Ihre Anforderungen in ein paar Jahren ändern, dann sind Sie besser dran, wenn Sie mit einem größeren Stack begonnen haben.

+1

Mit LwIP können Sie höchstwahrscheinlich die Funktionen aufheben, die Sie nicht verwenden, um Code-Fußabdruck zu sparen. – mpontillo

3

+1 für lwIP.

Es ist in der Luminary Micros (jetzt TI) Serial-to-Ethernet-Referenz-Design mit einigen zusätzlichen Funktionen (eine Art "Server Side Scripting" und CGI) auf Bare-Metal (ohne RTOS) enthalten.

Es ist felsenfest und sehr performant mit nur 32 KB oder RAM.

Grüße

PFM

3

Ich bin mit lwip auf dem Stellaris Cortex-M3 zufrieden.

StellarisWare für das LM3S6965 Evaluierungsboard enthält die enet_lwip Demo. Dies ist ein kleiner Webserver, der über lwip läuft und über Bare Metal läuft - in diesem Fall kein FreeRTOS. Das System wird von den Timer- und Ethernet-Interrupts gesteuert. Es war ziemlich einfach, den Webserver auszulöschen und meine App zu laden. Ich musste kein Lwip-Experte werden, um das erste Mal zum Laufen zu bringen.

Später wurde mir klar, dass meine App intrinsisch aufgerufen wurde. Zuerst hatte es eine Socket-Upcall-Dichtung. Ich ersetzte diese Ebene durch eine viel einfachere, die lip-native Up-Calls in die upcalls der App übersetzt und die Socket-API von lwip auswählte. Dies spart mehr Flash- und RAM-Speicher und macht das Ganze schneller und einfacher. Mit ein wenig Feinabstimmung habe ich es auf dem S2E Board mit 52K Flash und 30K RAM laufen lassen.

16

Ich habe sowohl UIP und LWIP ausgiebig verwendet.

uIP

  • Großartig, wenn youre nur etwas Grundsätzliches wie ein Bootloader
  • Geringer Platzbedarf zu wollen.
  • Polling Verwendet so haben wir nie über 3kbit damit :-(
  • Kein DHCP 'out of the box'
  • Schlechte UDP-Unterstützung

lwIP

  • bekam Vollständig unterbrechungsfrei so viel schneller gesteuert (~ x10)
  • Enthält DHCP mit Failover AutoIP
  • UDP Multicast mit
  • plus mehr

EDIT:
Und wir haben auch nie mit einem RTOS verwendet, wie hat es nie eine Notwendigkeit gewesen.

+0

Sie können uIP mehr als 3kbit/s tun. Ich hatte es bei> 100kByte/s, aber es erforderte erhebliche Feinabstimmungen. uIP ist gut, wenn Sie Code-begrenzt sind, aber es ist extrem nackt. –

+0

Meine Implementierung läuft derzeit bei fast 245kbits/sec, und das ist w/o absolut keine Änderungen an der zugrunde liegenden Ebene. Alles, was ich sicherstellte, war, dass die ausgehenden Frames alle so nah wie möglich an 1500 Bytes waren und die Sendeaufrufe blockierten. –

0

Ich habe den Microchip TCP/IP-Stack verwendet. Ich war sehr glücklich damit. Es war sehr einfach zu implementieren, viele Demo-Code/Tutorials verfügbar, und hat Unterstützung für eine Vielzahl von Protokollen HTTP, TFTP, SMTP, SNTP, etc. Ein Punkt, der nicht Ihren Anforderungen entspricht, ist jedoch, dass es nicht leicht zu transportieren ist zu einer anderen Architektur. Tatsächlich glaube ich, dass die Lizenz für den Stack dies explizit verbietet, weil Microchip möchte, dass Sie den Stack nur mit ihrer Hardware PIC18, PIC24 und PIC32 ausführen. Es gibt jedoch einen externen Ethernet-Controller, den sie verkaufen, dass Sie bestimmte Teile dieses Stapels mit ihrem ENC28J60 verwenden können.

0

Ich habe interniche auf RTOS verwendet. Es ist ein vollwertiger Stack und unterstützt einige Funktionen. Da Sie eine nichtkommerzielle Version suchen, liegt meine Stimme bei lwIP.

0

Sie können die Open-Source FNET TCP/IP stack versuchen.

+1

Das ist wirklich keine Antwort auf seine Frage. Die Erwähnung eines zusätzlichen Stacks wäre besser als Kommentar gemacht worden. –