contiki:simple-udp-workshop
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| contiki:simple-udp-workshop [2015/05/10 06:13] – angelegt admin | contiki:simple-udp-workshop [2018/12/03 14:53] (aktuell) – admin | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Workshop: Erstellung eines einfachen UDP Service mit Contiki ====== | ====== Workshop: Erstellung eines einfachen UDP Service mit Contiki ====== | ||
| - | ==== 1. Installation der Entwicklungsumgebung: | + | ==== 1. Installation der Entwicklungsumgebung: |
| * Die Installation von [[http:// | * Die Installation von [[http:// | ||
| - | * Anmeldung an Instant Contiki mit dem Passwort: '' | + | * Anmeldung an //Instant Contiki// mit dem Passwort: '' |
| - | * Die folgende Beschreibung bezieht sich immer auf das Quellcode-Verzeichnis: | + | * Die folgende Beschreibung bezieht sich immer auf das Quellcode-Verzeichnis: |
| ==== 2. Anpassungen des Quellcodes ==== | ==== 2. Anpassungen des Quellcodes ==== | ||
| - | Im Workshop werden Contiki-Anwendungen direkt auf dem Entwicklungsrechner ausgeführt. Dazu müssen einige Veränderungen an den Quellcode-Dateien vorgenommen werden. Im ersten Schritt wird die Anwendung für IPv4 erstellt. Die Anpassung für IPv6, sowie die Kompilierung für weitere Hardwareplattformen (Mikrocontrollerboards) ist später möglich. | + | Im Workshop werden Contiki-Anwendungen direkt |
| === 2.1 Erstellen eines neuen Projekt-Verzeichnisses === | === 2.1 Erstellen eines neuen Projekt-Verzeichnisses === | ||
| - | - Erstellen Sie das Verzeichnis: | + | - Erstellen Sie das Verzeichnis: |
| - | === 2.2 Erstellen des Quellcodes | + | === 2.2 Erstellen des Makefiles |
| Für das Projekt werden eine C-Datei und ein Makefile benötigt. | Für das Projekt werden eine C-Datei und ein Makefile benötigt. | ||
| - | - Erstellen Sie folgendes '' | + | - Erstellen Sie folgendes '' |
| <code make> | <code make> | ||
| Zeile 28: | Zeile 28: | ||
| include $(CONTIKI)/ | include $(CONTIKI)/ | ||
| </ | </ | ||
| + | |||
| + | Für die Verwendung von IPv6 verwenden Sie das folgende Makefile: | ||
| + | |||
| + | <code make> | ||
| + | CONTIKI_PROJECT = simpleUDP | ||
| + | all: $(CONTIKI_PROJECT) | ||
| + | |||
| + | UIP_CONF_IPV6=1 | ||
| + | UIP_CONF_RPL=0 | ||
| + | |||
| + | CFLAGS += -DUIP_CONF_IPV6=1 | ||
| + | |||
| + | CONTIKI = ../.. | ||
| + | include $(CONTIKI)/ | ||
| + | </ | ||
| + | |||
| + | === 2.3 Erstellen des Quellcodes === | ||
| - Erstellen Sie die C-Datei '' | - Erstellen Sie die C-Datei '' | ||
| Zeile 41: | Zeile 58: | ||
| #include " | #include " | ||
| #include " | #include " | ||
| - | #include " | + | #include "net/ip/ |
| #include " | #include " | ||
| #include < | #include < | ||
| Zeile 67: | Zeile 84: | ||
| ((char *)uip_appdata)[uip_datalen()] = 0; | ((char *)uip_appdata)[uip_datalen()] = 0; | ||
| printf(" | printf(" | ||
| + | | ||
| /*Verwende die Quell- als Zieladresse fuer Antwort */ | /*Verwende die Quell- als Zieladresse fuer Antwort */ | ||
| uip_ipaddr_copy(& | uip_ipaddr_copy(& | ||
| udpconn-> | udpconn-> | ||
| + | | ||
| /*Schreibe Antwort-Daten in Buffer*/ | /*Schreibe Antwort-Daten in Buffer*/ | ||
| sprintf(buf, | sprintf(buf, | ||
| + | | ||
| /*Versende das Antwort-Packet*/ | /*Versende das Antwort-Packet*/ | ||
| uip_udp_packet_send(udpconn, | uip_udp_packet_send(udpconn, | ||
| + | | ||
| /*Setze Adresse/ | /*Setze Adresse/ | ||
| /*um von jedem Absender Daten empfangen zu koennen*/ | /*um von jedem Absender Daten empfangen zu koennen*/ | ||
| Zeile 90: | Zeile 111: | ||
| /* d.h. akzeptiere jede ankommende Verbindung*/ | /* d.h. akzeptiere jede ankommende Verbindung*/ | ||
| udpconn = udp_new(NULL, | udpconn = udp_new(NULL, | ||
| + | | ||
| /*Setze den Port auf dem gelauscht wird auf 49999*/ | /*Setze den Port auf dem gelauscht wird auf 49999*/ | ||
| /*HTONS() uebersetzt zur Network Byte Order*/ | /*HTONS() uebersetzt zur Network Byte Order*/ | ||
| Zeile 97: | Zeile 119: | ||
| /* Warte bis ein TCP/IP Event eintrifft */ | /* Warte bis ein TCP/IP Event eintrifft */ | ||
| PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event); | PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event); | ||
| + | | ||
| /*Rufe die Handler-Funktion auf*/ | /*Rufe die Handler-Funktion auf*/ | ||
| bsp_udphandler(); | bsp_udphandler(); | ||
| Zeile 113: | Zeile 136: | ||
| <code bash> | <code bash> | ||
| - | Sollte es notwenig sein nachträglich Änderungen am Makefile durchzuführen, | + | Sollte es notwenig sein nachträglich Änderungen am Makefile durchzuführen |
| + | um zwischen IPv4 und IPv6 zu wechseln), sollte das | ||
| Projekt vor der erneuten Übersetzung zurückgesetzt werden: | Projekt vor der erneuten Übersetzung zurückgesetzt werden: | ||
| <code bash> | <code bash> | ||
| - | ==== 4. Ausführung des UDP-Servers | + | ==== 4. Ausführung des UDP-Service |
| Nach der erfolgreichen Übersetzung kann die Anwendung gestartet werden. Das muss | Nach der erfolgreichen Übersetzung kann die Anwendung gestartet werden. Das muss | ||
| Zeile 126: | Zeile 150: | ||
| <code bash> | <code bash> | ||
| - | Contiki richtet jetzt ein neues Netzwerkinterface '' | + | Contiki richtet jetzt ein neues Netzwerkinterface '' |
| Dabei werden die verwendeten Netzwerkeinstellungen angezeigt. | Dabei werden die verwendeten Netzwerkeinstellungen angezeigt. | ||
| Zeile 132: | Zeile 156: | ||
| werden. | werden. | ||
| - | ==== 5. Interaktion mit dem UDP-Server | + | ==== 5. Interaktion mit dem UDP-Service |
| Starten Sie ein zweites Terminalfenster und testen Sie den Service | Starten Sie ein zweites Terminalfenster und testen Sie den Service | ||
| - Pingen Sie den Contiki UDP-Service: | - Pingen Sie den Contiki UDP-Service: | ||
| - | - Senden Sie mit dem Programm '' | + | - Senden Sie mit dem Programm '' |
| + | ==== 6. Contiki UDP-Client ==== | ||
| + | |||
| + | <code c> | ||
| + | /** | ||
| + | * \file | ||
| + | | ||
| + | * \author | ||
| + | | ||
| + | */ | ||
| + | |||
| + | #include " | ||
| + | #include " | ||
| + | #include " | ||
| + | #include " | ||
| + | #include " | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | #include " | ||
| + | #define UDP_PORT 40000 | ||
| + | #define SEND_INTERVAL | ||
| + | |||
| + | static struct simple_udp_connection client_connection; | ||
| + | |||
| + | / | ||
| + | PROCESS(client_example_process, | ||
| + | AUTOSTART_PROCESSES(& | ||
| + | / | ||
| + | static void | ||
| + | receiver(struct simple_udp_connection *c, | ||
| + | const uip_ipaddr_t *sender_addr, | ||
| + | | ||
| + | const uip_ipaddr_t *receiver_addr, | ||
| + | | ||
| + | const uint8_t *data, | ||
| + | | ||
| + | { | ||
| + | printf(" | ||
| + | | ||
| + | } | ||
| + | / | ||
| + | PROCESS_THREAD(client_example_process, | ||
| + | { | ||
| + | static struct etimer periodic_timer; | ||
| + | uip_ipaddr_t addr; | ||
| + | |||
| + | PROCESS_BEGIN(); | ||
| + | //ohne simple_udp_register funktioniert das Senden nicht! | ||
| + | simple_udp_register(& | ||
| + | NULL, UDP_PORT, receiver); | ||
| + | |||
| + | etimer_set(& | ||
| + | while(1) | ||
| + | { | ||
| + | PROCESS_WAIT_EVENT_UNTIL(etimer_expired(& | ||
| + | etimer_reset(& | ||
| + | |||
| + | printf(" | ||
| + | |||
| + | // senden auf die eigene Adresse 172.18.0.2 funktioniert bei | ||
| + | // Instant-Contiki nicht: arp auf tun0-Interface? | ||
| + | // | ||
| + | uip_ipaddr(& | ||
| + | simple_udp_sendto(& | ||
| + | } | ||
| + | PROCESS_END(); | ||
| + | } | ||
| + | </ | ||
contiki/simple-udp-workshop.1431238393.txt.gz · Zuletzt geändert: (Externe Bearbeitung)
