NesC
MaD-WiSe è scritto in NesC, una variante del
linguaggio C, sviluppata per la programmazione dei sensori. In questo
linguaggio si separa il concetto di costruzione del codice dal concetto di
composizione di una applicazione. I componenti del NesC possono essere di due
tipi: moduli o configurazioni: i moduli forniscono il codice dell'applicazione
implementando una o più interfacce, le configurazioni sono utilizzate per
collegare staticamente i componenti, specificando quali sono le interfacce
usate e quali moduli le forniscono. Questo aumenta l'efficienza a tempo di
esecuzione e permette di definire i collegamenti ad alto livello tra i moduli. Le
interfacce sono l'unico punto di accesso ai componenti e i moduli sono
assemblati tra di loro come specificato nelle configurazioni.
In NesC sono previste tre tipi di funzioni: comandi, eventi e task.
I comandi
comportano l'esecuzione di una azione e sono funzioni che possono essere
chiamate da un modulo che usa l'interfaccia. Il modulo che li implementa
definisce il codice delle funzioni e le espone come pubbliche a quelli che
vorranno utilizzarle.
Gli eventi
sono gestiti da handler che si occupano della segnalazione di un'azione
completata o di qualcosa che è accaduto; sono eseguiti in modo atomico e
solitamente sono associati ad interruzioni di basso livello, come la
rilevazione di un dato da un sensore o il completamento di un'operazione
richiesta. Per questo motivo un evento che viene segnalato da un livello
inferiore mentre un comando viene invocato in senso opposto ovvero da un
livello superiore.
I task sono
procedure che vengono eseguite in sequenza secondo una politica FIFO e senza
interferire tra di loro: si occupano di azioni delicate che non devono
modificare strutture dati in contemporanea. I task possono essere interrotti
soltanto da eventi e in tal caso riprendono l'esecuzione una volta che questi
sono terminati.