MSP430 uIP Port

Wechseln zu: Navigation, Suche

Allgemeines

Der uIP ist ein TCP/IP Stack von Adam Dunkels für kleine Mikrocontroller. Der Stack kommt mit weniger als 10k ROM und 1k RAM aus. Dieses Stück Software stellt ein Meisterwerk an Kompaktheit in Verbindung Lesbarkeit und Norm-Konformität dar. Er ermöglicht Webserver, E-Mail Clients und andere Anwendungen auf kleinste Controller zu portieren. Mit der zunehmenden Verfügbarkeit der allgegenwärtigen Ethernet-Schnittstelle eröffnet die Lösung eine interessante Perspektiven für neue Ideen.

Zum Port

Als Basis für wurden die Originalquellen von Adam Dunkels (uIP 1.0) und der Port des uIP 0.9 von Paul Curtis genommen. Als Hardwareplattform kam EasyWeb3 von Olimex zum Einsatz. Das Programm sollte auch auf dem EasyWeb2 laufen. Zunächst wurde die Portierung mit CrossWorks der Fa. Rowley gestartet. Die hier verfügbaren Quellen sind sowohl mit dem CrossWorks Compiler als auch mit der MSPGCC Toolchain compilierbar (#define MSPGCC, #define ROWLEY).

Bei der Portierung sind Grenzen des Rowley Compilers aufgefallen:
- Maximale Verschachtelungstiefe von 10 Inklude-Dateien
- Bei der Verknüpfung von send_data() & data_acked() wurden nicht immer beide Routinen aufgerufen (lt. Dunkels "tricky").

Erstaunlicherweise enthielt DIE Beispiels-Applikationen Webserver ein paar triviale Fehler. Siehe dazu auch die Readme-Datei sowie das patch-Verzeichnis.

Die nicht getesteten und überflüssigen Quellen habe ich entfernt, um Verwirrungen zu vermeiden. Auch die HTML Dokumentation ist im Download nicht dabei. Bei Bedarf bitte die Originale von Adam Dunkels verwenden.

Zu den Compilern

Zunächst misstraute ich der GCC Toolchain und verwendete die Rowley Software. Dieses Tool ist angenehm, schnell, handlich und stabil. Insbesondere der Debugger gefiel mir. Nach der Behebung der Fehler konnten die Quellen ohne weitere Anpassungen (Ausnahme: Schreibweise ISR Routine) mit der MSPGCC Toolchain compiliert werden. Die Applikation lief sofort. Auch der Platzbedarf der Compilate ist vergleichbar:

           Rowley    MSPGCC   Rowley          MSPGCC
           (Bytes)   (Bytes)  (Addr)  (Addr)  (Addr)  (Addr)
 clock.c      20        22     305a    306e    335e    3374
 c8900a.c    720       690     306e    333e    3374    3626
 main.c      348       270     333e    349a    3626    3734
 psock.c     760       694     1100    13f8    3734    39ea
 timer.c      60        58     13f8    1434    39ea    3a24
 uip_arp.c   934      1054     21e8    258e    3a24    3e42
 uip.c      3508      3382     1434    21e8    3e42    4b78
 httpd.c    1906      1606     28e8    305a    4b78    51be
 httpd-cgi.c 630       602     258e    2804    51be    5418
 httpd-fs    228       262     2804    28e8    5418    551e
 libc       1750      2236     349a    3b70    2aa2    335e
 
 total     10864     10876

Fazit

Dieser Port zeigt, dass dieser TCP/IP Stack auf dem MSP430 einsetzbar ist. Der ROM-Bedarf ist mit unter 10k erträglich. Der RAM-Bedarf ist schon eher schmerzhaft. Aber immerhin ist noch soviel Platz vorhanden, dass sinnvolle Applikationen umsetzbar sind. Die bekanntermaßen effiziente MSP430 Hardware mit ihren sehr guten analogen Eigenschaften und der brillianten Peripherie kommt gut mit den Anforderungen zurecht. Besonderer Dank gilt Adam Dunkels, der sein Werk für nicht-kommerzielle und kommerzielle Anwendungen freigegeben hat (siehe Copyright Vermerk in den Quellen).

Download

MSP430 uIP 1.0

Links