Ins Netz gegangen

9. Februar 2007, 10:42 Uhr |
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

TCP/IP und die LPC2300-Familie

Basierend auf den geschilderten Mechanismen ist leicht ersichtlich, dass die Implementierung eines TCP/IP-Stacks eine große Aufgabe ist. Es gibt Schätzungen, dass die Programmierung eines stabilen TCP/IP-Stacks mehrere Mannjahre benötigt. Andererseits sträuben sich Programmierer von Embedded Systemen generell, vorgefertigte und kompilierte Programme zu übernehmen, weil damit unbekannte Risiken verbunden sind, falls bei der Fehlersuche plötzlich eine »Black Box« im Mittelpunkt steht.

NXP stellt seinen Kunden einen TCP/IP-Stack im ANSIC- Sourcecode zur Verfügung. Ein Mini-Sockets-API ist implementiert und kann ohne weitere Auflagen für alle Bausteine der LPC2000- und LPC3000-Familien benützt werden.

Das Mini-Sockets-API ist ähnlich dem BSD-Sockets-API, das vorher beschrieben wurde. Der Hauptunterschied ist, dass im Mini-Sockets die drei Serveraufrufe »bind()«, »listen()« und »accept()« in einem Aufruf »m_listen()« zusammengefasst sind und ein »callback«-Mechanismus den »select()«-Aufruf ersetzt, um die Implementierung zu vereinfachen.

Zwei Projektdateien gehören zum Lieferumfang der Beispielsoftware für den TCP/IP-Stack. Eine arbeitet mit Keils »?Vision« zusammen und die andere mit ARMs »RealView«-Tools. Eine dritte Version für »Embedded Workbench ARM« (EWARM) von IAR wird in Kürze ebenfalls angeboten. Im Projekt gibt es ein ausführbares und funktionales Beispiel, das »listener « heißt. In der Datei »http_stub.c« ist der Code enthalten. Beim Ausführen dieses Beispielprogramms öffnet es eine Verbindung auf dem Port 80 des Hosts und wartet auf eine Anforderung des Browsers. Sobald diese Anforderung mit einem HTTP-GET oder -POST kommt, setzt die Software ein Datenpaket zusammen, das aus einem http-Header und einer HTML-Webseite besteht. Der Browser stellt dann die Seite dar.

Dieses Beispiel setzt sich aus drei Hauptfunktionen zusammen, »http_init«, »ht_upcall« und »http_check«, die alle in der Datei »http_ in.c« zu finden sind. Üblicherweise fängt das NicheLite-TCP/IP-Beispiel mit einer Initialisierung an und geht dann in eine Polling- Schleife, die InterNiche »Superloop« nennt. In dieser Schleife wartet das Programm die ganze Zeit auf Eingaben des Bedieners oder des Netzwerks. Die Schleife ist Teil des Hauptprogramms »main()«. Zu Beginn der Initialisierung ruft das Hauptprogramm »http_init« auf, welches den Server in den »listen«-Modus versetzt. Gelauscht wird auf Anforderungen am Port 80. Das Programm »m_listen() « definiert auch ein Callback-Programm mit Namen »ht_upcall«. Dieses Programm wird aufgerufen, sobald ein Datenpaket bearbeitet werden muss. Falls der TCP/IP-Stack ein Datenpaket empfängt, setzt »ht_upcall« einen Merker für das empfangene Datenpaket. In einem separaten Datenfeld wird die Information gespeichert, ob es sich bei der Anforderung um eine GET- oder POST-Anforderung handelt. In der Pollingschleife wird dann im weiteren Programmverlauf das Programm »http_check« aufgerufen. Wurde ein Datenpaket empfangen, wird geprüft, ob es sich um ein GET oder POST handelt. Falls ja, dann generiert die Funktion einen Antwort- Header und die HTML-Seite in einem gesonderten Speicherbereich. Dann wird die Antwort mit einem »send socket«-Aufruf an den Browser zurückgeschickt. Die Webseite ist jetzt im Browser des anderen Computers sichtbar.

Marcel Consée, Design&Elektronik

<< vorherige Seite1 | 2 | 3


  1. Ins Netz gegangen
  2. TCP/IP und die LPC2300-Familie
  3. Ins Netz gegangen

Jetzt kostenfreie Newsletter bestellen!