TinyOS & nesC

Jazyk nesC

nesC logo

Operační systém TinyOS

TinyOS logo

Instalační balíčky

Atmel AVR Tools

Pro překlad zdrojových kódů je nutné nainstalovat avr-gcc verze 3.4.3, se staršími verzemi není zaručeno, že překlad bude fungovat.

Tool Linux
avr-binutils avr-binutils-2.15tinyos-3.i386.rpm
avr-gcc avr-gcc-3.4.3-1.i386.rpm
avr-libc avr-libc-1.2.3-1.i386.rpm
avarice avarice-2.4-1.i386.rpm
insight (avr-gdb) avr-insight-6.3-1.i386.rpm

TinyOS a nesC

Tool Linux Command
NesC nesc-1.2.4-1.i386.rpm rpm -Uvh
tinyos-tools tinyos-tools-1.2.1-3.i386.rpm rpm -ivh --force (1.x tree)
rpm -Uvh (no 1.x tree)
TinyOS tinyos-2.0.0beta1-3.noarch.rpm

Nastavení systémovýh proměnných s cestami

	TOSROOT=/opt/tinyos-2.x
	TOSDIR=$TOSROOT/tos
	CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:.
	MAKERULES=$TOSROOT/support/make/Makerules
	

Modul Charon II

Modul Charon II

První seznámení

Jazyk nesC obsahuje rozhraní pro komunikaci mezi komponentami. Komunikace probíhá pomocí příkazů a událostí.

Úpravy portu pro naší vývojovou desku

/opt/tinyos-2.x/tos/platforms/mica/PlatformLedsC.nc

Vývojová deska mica2 má LED diody vyvedeny na portu A, v našem případě je použit port D.

includes hardware;

configuration PlatformLedsC
{
  provides interface GeneralIO as Led0;
  provides interface GeneralIO as Led1;
  provides interface GeneralIO as Led2;
  uses interface Init;
}
implementation
{
  components HplAtm128GeneralIOC as IO;
  components PlatformP;

  Init = PlatformP.LedsInit;

  Led0 = IO.PortD0;  
  Led1 = IO.PortD1; 
  Led2 = IO.PortD2;
}

Rozblikání LEDek

BlinkC.nc

Následující zdrojový kód obsahuje modul BlinkC, který používá rozhraní Timer, v <závorkách> definovaná přesnost (datový typ) čítání, dále Leds – ovládání LEDek na vývojové desce a rozhraní Boot, které inicializuje komponenty po nabootování TinyOS.

includes Timer;

module BlinkC
{
  uses interface Timer<TMilli> as Timer0;
  uses interface Leds;
  uses interface Boot;
}

Následuje implementace modulu BlinkC. Po bootu se inicializuje časovač příkazem startPeriodic, který nastaví periodu 1000 ms. Po uběhnutí periody nastane událost fired, která zavolá příkaz led0Toggle() rozhraní Leds.

implementation
{
  event void Boot.booted()
  {
    call Timer0.startPeriodic( 1000 );
  }

  event void Timer0.fired()
  {
    call Leds.led0Toggle();
  }
}

BlinkAppC.nc

V tomto souboru je realizováno propojení komponent MainC, BlinkC, LedsC

configuration BlinkAppC
{
}
implementation
{
  components MainC, BlinkC, LedsC;
  components new TimerMilliC() as Timer0;

  BlinkC -> MainC.Boot;
  BlinkC.Timer0 -> Timer0;
  BlinkC.Leds -> LedsC;
}

Překlad zrojového kódu se provádí příkazem make <platforma>, našem případě make mica2. Soubor Makefile obsahuje direktivu COMPONENT=BlinkAppC s definicí souboru s konfigurací, o zbytek se stará univerzální skript

.

Nahrání binárního kódu jsem prováděli pomocí:

uisp -dlpt=/dev/ttyS0 -dasa2

Odkazy