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 |
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 |
TOSROOT=/opt/tinyos-2.x TOSDIR=$TOSROOT/tos CLASSPATH=$TOSROOT/support/sdk/java/tinyos.jar:. MAKERULES=$TOSROOT/support/make/Makerules
Jazyk nesC obsahuje rozhraní pro komunikaci mezi komponentami. Komunikace probíhá pomocí příkazů a událostí.
/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; }
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