Upload
vodat
View
236
Download
0
Embed Size (px)
Citation preview
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
European Master on Critical Networked SystemsModulo su Mobile Systems
Parte : titolo parte
Lezione x: titolo lezione
Docente: nome docente
info@mobilab unina itwww mobilab unina it
Dipartimento di Informatica e SistemisticaVia Claudio 21, 80125 Napoli
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Contenuti della lezione
Modello di programmazione di TinyOSNesCNesCInvio e ricezione su reteLettura sensoriLettura sensoriEs. di debug
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Introduzione a NesC
TinyOS è implementato in NesC (Network Embedded System C), un dialetto dellinguaggio di programmazione C
NesC adott il il modello di concorrenza event-based e la nozione dicomponente propri di TinyOS
NesC è un linguaggio statico : non prevede alcun meccanismo per l’allocazionedinamica della memoria.
Il grafo delle chiamate è pienamente noto in fase di compilazione consentendodi analizzare in dettaglio l’applicazione prodotta, riconoscere gran parte dellecorse critiche ed ottimizzare le performance
info@mobilab unina itwww mobilab unina it
corse critiche ed ottimizzare le performance.
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. generalità
f è b d l ’ f d fOgni interfaccia è bidirezionale : un’interfaccia consente di specificare:
le funzioni che devono essere implementate da chi esporta l’interfaccia(comandi),funzioni che devono essere implementate dagli utilizzatori della stessainterfaccia (eventi).( )
Tipicamente i comandi sono invocazioni verso il basso, ovvero da uncomponente applicativo ad un altro più vicino allo strato hardware;componente applicativo ad un altro più vicino allo strato hardware;
gli eventi sono, invece, invocazioni di funzioni verso l’alto.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
Ci d ti i di ti i C d li fi i i
::. Componenti di base
Ci sono due tipi di componenti in nesC: moduli e configurazioniI moduli provvedono al codice dell’applicazione e all’implementazione di una o piùinterfacceLe configurazioni sono usate per assemblare insieme componenti connettendoLe configurazioni sono usate per assemblare insieme componenti, connettendointerfacce usate da componenti ad interfacce fornite da altri. (Wiring delle interfacce)Ogni applicazione nesC è descritta da una top-level configuration che “cabla” insiemei componenti.i componenti.
comp1:module
comp3
Components:implementation
- module: C behaviourfi timodule
comp4
configuration:select and wire interfacesprovides interface
i i t f
info@mobilab unina itwww mobilab unina it
comp4
comp2:configuration application:
configuration
requires interface
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Programming Model
I commands devono essere implementati dal componente che forniscel’interfacciaGli events “pilotano” l’interfaccia : devono essere implementate dalGli events pilotano l interfaccia : devono essere implementate dalcomponente utilizzatore dell’interfacciUn componente se vuole utilizzare un command di un interfaccia deveprovvedere ad un event su quella interfacciaprovvedere ad un event su quella interfaccia
{...status = call CmdName(args)...
command CmdName(args) {...return status;}
C1 C2
}
{...event EvtName)(args) {
C1C1 C
info@mobilab unina itwww mobilab unina it
status = signal EvtName(args)...}
...return status;}C2
2
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Processo di Compilazione di un’applicazione nesc
Il compilatore NesC accetta in ingresso il sorgente NesC dell’applicazione e lelibrerie di componenti di sistema di TinyOS (anche esse scritte in NesC) egenera in uscita un singolo file sorgente scritto in C.Il sorgente C viene, compilato da un compilatore C specifico per lapiattaforma hardware utilizzata (per gli Atmel, avr-gcc), ottenendol’immagine eseguibile da caricare in memoria.g g
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Concetti di base
concetti base del linguaggio di programmazione NesC sono:
S i d ll i d ll i iSeparazione della costruzione dalla composizione
Un’applicazione NesC è una composizione di componenti, assemblatimediante una specifica di wiring.
Ciascun componente `e caratterizzato da una specifica, definitap pattraverso le interfacce, e da un’implementazione.
I componenti possiedono una concorrenza interna nella forma di task.
info@mobilab unina itwww mobilab unina it
I componenti possiedono una concorrenza interna nella forma di task.
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Specifica del comportamento mediante le interfacce
Le interfacce di un componente si articolano in due diversecategorie:
l i f ( id d)le interfacce esporatate (provided)e quelle importate (used).
Le interfacce esportate consentono di specificare le funzionalitàche il componente fornisce ai suoi utilizzatori;
Le interfacce importate definiscono le funzionalità di cui ilcomponente necessita per espletare le sue mansioni.
info@mobilab unina itwww mobilab unina it
p p p
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Specifica del comportamento mediante le interfacce
Poichè i comandi sono non bloccanti (asincroni), gli eventi sono resi necessarial fine di segnalarne l’espletamento.
La bidirezionalità dell’interfaccia è un meccanismo particolarmente espressivoper la realizzazione di complessi meccanismi di interazione tra componenti.
I componenti sono assemblati staticamente attraverso le interfacce.
Questo approccio consente di accrescere:Questo approccio consente di accrescere:l’efficienza a run-timela robustezzaConsente di realizzare una migliore analisi statica delle applicazioni
info@mobilab unina itwww mobilab unina it
Consente di realizzare una migliore analisi statica delle applicazioni(rilevamento delle corse critiche).
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
I componenti sono legati insieme connettendo le
::. Specifica del comportamento mediante le interfacce p g
proprie interfacceE’ possibile formare una gerarchia
Commands:Fluiscono verso il bassoIl ritorno ritornato subito al chiamanteIl ritorno ritornato subito al chiamante
Events:Fluiscono verso l’altoIl t ll è it t l t h hIl controllo è ritornato al componente che hagenerato l’evento
info@mobilab unina itwww mobilab unina it
Gli eventi possono invocare comandi
Non vale il [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Interfacce
Le interfacce sono lo strumento attraverso il quale si realizza la specifica di uncomponente.
Ogni componente è definito, in termini delle interfacce esportate ed importate.
Ciascuna interfaccia è a sua volta definita da un insieme di
comandi (generalmente richieste di servizi)di eventi (generalmente notifiche dell’esecuzione di servizi)di eventi (generalmente notifiche dell esecuzione di servizi).L’insieme dei comandi descrive il servizio offerto dal componente,l’insieme degli eventi descrive il servizio utilizzato dal componente.
info@mobilab unina itwww mobilab unina it
Il componente implementa i gestori degli eventi per ogni interfaccia importataed i comandi per ogni interfaccia esportata.
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Interfacce
La dichiarazione di un’interfaccia segue la sintassi:
interface nome_interfaccia {command retunt_type nome_comando(parametri);. . .event retunt_type nome_evento(parametri);. . .}
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Interfacce
La parola chiave async può essere anteposta ad event o command perspecificare che l’evento o il comando possono essere eseguiti all’interno di uninterrupt handlerinterrupt handler.
La descrizione di un’interfaccia deve essere contenuta in un file .nc con lot d ll’i t f istesso nome dell’interfaccia.
Un esempio di interfaccia `e il seguente:
interface SendMsg {command result_t send(uint16_t add, uint8 t le, TOS MsgPtr msg);
info@mobilab unina itwww mobilab unina it
u t8_t e, OS_ sg t sg);event result_t sendDone(TOS_MsgPtrmsg, result_t success);}
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Moduli
Un modulo implementa la specifica di un componente TinyOS
Ogni modulo ha due blocchi distinti:Ogni modulo ha due blocchi distinti:
una specifica, che riporta l’elenco delle interfacce esportate ed importate
Un’implementazione, che riporta:
la definizione di tutti i comandi di tutte le interfacce esportatela definizione di tutti i comandi di tutte le interfacce esportatela definizione di tutti i gestori degli eventi di tutte le interfacce importateeventuali task del componente.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Moduli
La specifica delle interfacce utilizzate dal componente è realizzata attraversole parole chiavi uses e provides.
module nome_modulo { module nome_modulo {uses {uses interface X; interface X;uses interface Y; interface Y;uses interface Y; interface Y;} provides {provides interface Z; interface Z;provides interface W; interface Z;
info@mobilab unina itwww mobilab unina it
}} }
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Moduli
Per indicare un comando/evento A, appartenente all’interfaccia X, siPer indicare un comando/evento A, appartenente all interfaccia X, siutilizza la notazione puntata X.A.
E’ ibil li d ’i f i l i iE’ possibile assegnare un alias ad un’interfaccia con la sintassiinterface Y as X;
se si utilizza un alias il riferimento è, ovviamente, Y.A.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Moduli
Alla specifica segue l’implementazione del componente.
L’i l i è l d ll k d i l i d èL’implementazione è segnalata dalla keyword implementation ed èracchiusa tra parentesi graffe.
Ogni comando previsto dalle interfacce esportate dal modulo èimplementato in modo del tutto analogo ad ogni evento delle interfacceimportate.p
implementation {command return_type nome_comando(parametri){. . .};command return type nome evento(parametri){ };
info@mobilab unina itwww mobilab unina it
command return_type nome_evento(parametri){. . .};}
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Moduli
E’ possibile invocare comandi attraverso la parola chiave call esollevare eventi tramite signal.
L’esecuzione dei comandi e degli eventi è immediata:
ovvero la chiamata a call e signal è semanticamente identica aduna chiamata a funzione C.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Creazione di Task
accanto ad eventi e comandi, `e possibile definire task la cui esecuzionesegue il modello di tinyos.
I task sono definiti come funzioni senza parametri di ingresso n`e di ritornoseguendo la sintassi:
task void nome_task(){...}
Un componente invoca l’esecuzione di un task, o, meglio, invia il task alloscheduler, mediante la keyword post:
info@mobilab unina itwww mobilab unina it
post nome_task()
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Atomic
E’ possibile definire dei blocchi atomici con lagaranzia che le operazioni al loro interno nonsaranno interrotte ma eseguite come una
bool busy;//global variablevoid f() {
sequenza indivisibile.
Per realizzare un blocco atomico è sufficiente
bool available;atomic {available = !busy;b s TRUE
inserire le operazioni critiche all’interno di:
atomic{ }
busy=TRUE;}if(availbale) do_something;atomic busy=FALSE;atomic{...}
I blocchi atomici sono utilizzati per realizzareforme di mutua esclusione tipicamente
y}
info@mobilab unina itwww mobilab unina it
forme di mutua esclusione, tipicamentedurante l’aggiornamento concorrente distrutture dati.
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Atomic: attenzione!
Gli ambienti atomici devono essere molto brevi, pena una fortelimitazione alla concorrenza del sistema.
A tale ragione è da ricondursi il fatto che NesC non consentel’in oca ione di comandi o la segnala ione di e enti al lo o inte nol’invocazione di comandi o la segnalazione di eventi al loro interno.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
L k i t /t /i t f /S dM
::. Sintassi dell’interfaccia
Look in <tos>/tos/interfaces/SendMsg.nc
Multiple components may provide and usethis interface
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
L k i t /t /i t f /StdC t l
::. Interfaccia StdControl
Look in <tos>/tos/interfaces/StdControl.nc
Every component should provide this interface– This is good programming technique, it is not a
info@mobilab unina itwww mobilab unina it
language specification
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
L k i t /t / t /AMSt d d
::. Sintassi di un modulo: interfaccia
Look in <tos>/tos/system/AMStandard.nc
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Sintassi di un modulo: Implementazione
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Configuration Syntax: Interface
le configurazioni abilitano alla composizione di moduli (operazione diWiring)
In un’applicazione TinyOS le configurazioni sono di gran lunga piùnumerose dei moduli giacchè si tende a realizzare gran parte deicomponenti complessi attraverso l’aggregazione di componenti di bassop p gg g plivello.
Il meccanismo della composizione consente di:Il meccanismo della composizione consente di:
esportare le interfacce ( ovvero di delegare ad altri componentil’implementazione di interfacce dichiarate dalla configurazione stessa)
info@mobilab unina itwww mobilab unina it
l implementazione di interfacce dichiarate dalla configurazione stessa)di rinominare le interfacce (ovvero di collegare un’interfaccia
importata dalla configurazione ad un interfaccia esportata)[email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Configuration Syntax: Interface
Come i moduli, le configurazioni si articolano in due blocchi: una signatureed un’implementazione.
La signature riporta l’elenco delle interfacce esportate ed importate dallaconfigurazione
Il blocco implementativo elenca prima i componenti che si intendonoutilizzare nelle operazioni di assemblaggio, esportazione e rinominazione
Poi specifica i cosiddetti vincoli di wiring, ossia i legami tra i componentiprima dichiarati
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Configuration Syntax: Interface
endpoint1 -> endpoint2 : realizza l’assemblaggio tra componenti (linkwires)wires).
La direzione delle frecce è convenzionalmente quella dall’interfacciaimportata verso l’interfaccia esportata.
endpoint1<- endpoint2 : equivale allo statement endpoint2 ->endpoint1< endpoint2 : equivale allo statement endpoint2 >endpoint1.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Configuration Syntax: Esempiocomposizione tra i componenenti C1 e C2composizione tra i componenenti C1 e C2.Tale configurazione rappresenta, nel suocomplesso, l’astrazione di un componente dilivello superiorelivello superiore
configuration SuperComponent{g p p {provides interface I1;provides interface I2;}implementation {
t C1 C2components C1, C2;I1=C1.I1 //esportazione;I2=C1.I2 //esportazione;C1.I3 -> C2.I3 //assemblaggio;
info@mobilab unina itwww mobilab unina it
// gg ;}
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Es: Blink
Target: far lampeggiare il led rosso con frequenza di 1 volta al secondo
configuration Blink {}implementation {components Main BlinkM SingleTimer LedsC;components Main, BlinkM, SingleTimer, LedsC;Main.StdControl -> SingleTimer.StdControl;Main.StdControl -> BlinkM.StdControl;BlinkM.Timer -> SingleTimer.Timer;BlinkM Leds -> LedsC;BlinkM.Leds -> LedsC;
}
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Es: Blinkmodule BlinkM { command result tmodule BlinkM {provides {interface StdControl;
}
command result_tStdControl.start() {
return callTimer.start(TIMER REPEAT, }
uses {interface Timer;interface Leds;
e .sta t( _ ,1000);}
command result t}
}implementation {
_StdControl.stop() {
return call Timer.stop();}
command result_tStdControl.init() {
event result_t Timer.fired(){call Leds.redToggle();
info@mobilab unina itwww mobilab unina it
call Leds.init(); return SUCCESS;
}
return SUCCESS;}
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Fan-Out and Fan-In
A user can be mapped to multiple providers (fan-out)– Open <tos>\apps\CntToLedsAndRfm\CntToLedsAndRfm.nc
info@mobilab unina itwww mobilab unina it • A provider can be mapped to multiple users (fan-in) [email protected]
Mobile SystemsS. Russo
p pp p ( )
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Top-Level Configuration
All applications must contain a top-level configuration that usesMain.StdControl
Open <tos>/apps/BlinkTask/BlinkTask.ncOpen <tos>/apps/BlinkTask/BlinkTask.nc
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Operazioni split-phase
In TinyOS, ogni operazione è una split-phase operation:l’invocazione di un servizio e l’operazione di ritorno sono, in realtà, duefunzioni separate.
Per richiedere un servizio ad un componente la procedura seguita è quella diinvocare un comando sul componenteIl comando avvia un task e ritorna immediatamente il controllo al componentepchiamante.Al termine del task viene notificato un evento sul componente che ha richiestoil servizioil servizio.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Operazioni split-phase
il componente chiamante non attende attivamente la risposta delcomponente chiamato (busy waiting), ma prosegue nelle proprieelaborazionielaborazioni.
Ricevuta poi la notifica dell’espletamento del servizio con un evento(all’interno del quale possono essere incapsulati dei dati), interrompel’esecuzione di eventuali task ed elabora l’evento ricevuto
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. TinyOS: l’ambiente di sviluppo
Convert NesC into Cand compile to execModify exec withplatform-specificplatform specificoptionsSet the mote IDReprogram the moteReprogram the mote
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Inter-Node Communication
General idea:Sender
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Inter-Node CommunicationGrafo dei componenti di un generica applicazione per WSNGrafo dei componenti di un generica applicazione per WSN
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Group IDs and Addresses
Group IDs create a virtual networkGroup ID is an 8 bit value specified in<tos>/apps/Makelocal<tos>/apps/Makelocal
The address is a 16-bit value specified by the make commandmake install.<id> mica2Reserved addresses:0x007E - UART (TOS_UART_ADDR)0xFFFF - broadcast (TOS BCAST ADDR)0xFFFF - broadcast (TOS_BCAST_ADDR)
Local address: TOS_LOCAL_ADDRESS
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. TOS Active Messages
• TOS uses activemessages as defined in<tos>/system/types/AM.h<tos>/system/types/AM.h• Message is “active”because it contains thedestination addressdestination address,group ID, and type• TOSH_DATA_LENGTH =29 bytes29 bytes– Can change viaMSG_SIZE=x in Makefile
M 36
info@mobilab unina itwww mobilab unina it
– Max 36
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. TOS Active Messages
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::. Message Buffer Ownership
Transmission: AM gains ownership ofthe buffer until
info@mobilab unina itwww mobilab unina it
the buffer untilsendDone(…) is signaled• Reception: Application’s eventhandler gains ownership [email protected]
Mobile SystemsS. Russo
handler gains ownershipof the buffer, but it must return a freebuffer for the next
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Sending a message (1 of 3)
First create a .h file with a struct definingthe message data format, and a uniqueactive message number– Open <tos>/apps/Oscilloscope/OscopeMsg.h
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Sending a Message (2 of 3)
info@mobilab unina itwww mobilab unina itQuestion: How does TOS know the AM number?
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Sending a Message (3 of 3)
The AM number is determined by theconfiguration file–Open <tos>/apps/OscilloscopeRF/Oscilloscope.ncOpen <tos>/apps/OscilloscopeRF/Oscilloscope.nc
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Receiving a Message
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Obtaining Sensor DataE h h t th t idEach sensor has a component that provides one or moreADC interfacesMTS300CA:components in <tos>\tos\sensorboards\micasbInclude in Makefile: SENSORBOARD=micasbMTS400/420:components in <tos>\tos\sensorboards\micawbInclude in Makefile: SENSORBOARD=micawb
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Obtaining Sensor Data
Sensor components usually provideStdControlB i i i li i b f iBe sure to initialize it before trying totake measurements!!Same goes with GenericCommInitializing it turns on the power AndLedsC
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Debug
What’s wrong with the code?
Symptom: data saved in globalData islostReason: Race condition between twotasks
Solution: Use a queue, or never rely oninter-task communication
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Potentially Nasty Bug 2
What’s wrong with the code?
Symptom: message is corrupt
Reason: TOS_Msg is allocated in thestack, lost when function returns
Solution: Declare TOS_Msg msg incomponent’s frame.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Potentially Nasty Bug 3
What’s wrong with the code?– Symptom: some messages are lostSymptom: some messages are lost
Reason: Race condition between twocomponents trying to share networkcomponents trying to share networkstack (which is split-phase)
Solution: Use a queue to store pendingSolution: Use a queue to store pendingmessages
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Potentially Nasty Bug 4
Symptom: Some messages are consistentlycorrupt and TOSBase is working Your appcorrupt, and TOSBase is working. Your appalways works in TOSSIM.
Reason: You specified MSG_SIZE=x wherex > 29 in your application but forgot to setx 29 in your application but forgot to setit in TOSBase’s makefile
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo
Napoli, Maggio-Giugno 07Mobilab European Master on Critical Networked Systems
::.Potentially Nasty Bug 5
Your app works in TOSSIM, but never works onthe mote. Compiler indicates you are using 3946the mote. Compiler indicates you are using 3946bytes of RAM.
Reason: TinyOS reserves some RAM for theStack. Your program cannot use more than 3.9KRAM.
info@mobilab unina itwww mobilab unina it [email protected]
Mobile SystemsS. Russo