Inhaltsverzeichnis

Contiki als Linux Prozess

Verwendung einer projektspezifischen Grundkonfiguration in Contiki

Die Reihenfolge mit der die Definitionen bei der Compilierung eingebunden werden ist die folgende:

  1. Definitionen in contiki-x.x/core/contiki-default-conf.h
  2. Definitionen in contiki-x.x/platform/xy/contiki-conf.h
  3. Definitionen in contiki-x.x/examples/your_working_folder/project-conf.h

Es ist meistens sinnvoll projektspezifische Änderungen über eine projektspezifische Konfigurationsdatei hinzuzufügen, statt Änderungen direkt in core oder platform vorzunehmen.

Ein Contiki Projekt kann dazu die optionale Konfigurationsdatei project-conf.h verwenden. Die Benutzung dieser Datei ist allerdings nicht voreingestellt sonder muss noch aktiviert werden. Zur Aktivierung sind die folgenden Schritte notwendig:

Schritt 1: Füge die project-conf.h Datei zum Makefile hinzu

Dazu muss die folgende Zeile zum Makefile des Projekts hinzugefügt werden:

 DEFINES+=PROJECT_CONF_H=\"project-conf.h\"

Weiterhin ist es sinnvoll im Makefile einen Default-Wert für das Target anzugeben:

# Project specific config file - start
DEFINES+=PROJECT_CONF_H=\"project-conf.h\"
# Project specific config file - end
 
all: udp-server udp-client
 
# Project specific compile target - start
ifndef TARGET
TARGET = minimal-net
CFLAGS += -DPROJECT_TARGET="minimal-net"
endif
# Project specific compile target - end
 
CONTIKI = ../..
CONTIKI_WITH_IPV6 = 1
include $(CONTIKI)/Makefile.include

Schritt 2: Integriere die Datei project-conf.h in die Plattform

Die Datei contiki/platform/minimal-net/contiki-conf.h muss angepasst werden.
In den meisten Plattformen werden projektspezifische Einstellungen gar nicht, oder erst am Ende der Plattformkonfiguration geladen. Diese müssen aber bereits am Anfang bekannt sein, damit die Abhängigkeiten korrekt aufgelöst werden.

...
 
#ifndef CONTIKI_CONF_H
#define CONTIKI_CONF_H
 
/*---------------------------------------------------------------------------*/
/* Include project specific config */
/* PROJECT_CONF_H might be defined in the project Makefile */
#ifdef PROJECT_CONF_H
#include PROJECT_CONF_H
#endif /* PROJECT_CONF_H */
/*---------------------------------------------------------------------------*/

Schritt 3: Anpassen der Datei project-conf.h

contiki-x.x/examples/your_working_folder/project-conf.h

/* 
*     My project-conf.h file 
*     for TARGET=minimal-net
*/
 
#ifndef PROJECT_CONF_H_
#define PROJECT_CONF_H_
 
#ifdef UIP_CONF_IPV6_RPL
#undef UIP_CONF_IPV6_RPL
#define UIP_CONF_IPV6_RPL           0
#endif /*UIP_CONF_IPV6_RPL*/
 
#ifdef RPL_BORDER_ROUTER
#undef RPL_BORDER_ROUTER
#define RPL_BORDER_ROUTER           0
#endif /*RPL_BORDER_ROUTER*/
 
UIP_CONF_BUFFER_SIZE	 1300
 
#endif /* PROJECT_CONF_H_ */

Schritt 4: Recompile

    make clean
    make <TARGET=xyz>

Erkunden und Dokumentieren der Grundfähigkeiten des Systems

Da Contiki Programme meistens nicht interaktiv erkundet werden können, ist es ratsam wichtige Einstellungen direkt anzeigen zu lassen um Vergleiche zwischen verschiedenen Versionen von Binärprogrammen zu ermöglichen. Dazu wird der folgende Code an einer passenden Stelle im Programm eingefügt:

 PRINTF("Build --- %s\n",__DATE__); /*Compile-Datum*/
 PRINTF("      --- %s\n",__TIME__); /*Compile-Zeit*/
 PRINTF("      --- %s\n",__FILE__); /*Compile-Datei*/
 
 printf("      --- " CONTIKI_VERSION_STRING "\n");
 printf("\nUIP_APPDATA: %u\nUIP_CONF_BUFFER: %u\n", UIP_APPDATA_SIZE, UIP_CONF_BUFFER_SIZE);
 
#if PROJECT_TARGET != minimal-net
 
  printf("      --- " BOARD_STRING "\n");
  printf(" Net: ");
  printf("%s\n", NETSTACK_NETWORK.name);
  printf(" MAC: ");
  printf("%s\n", NETSTACK_MAC.name);
  printf(" RDC: ");
  printf("%s", NETSTACK_RDC.name);
 
#endif /* PROJECT_TARGET */