Traduzione automatica di un middleware su ZigBee Andrea Brazzarola vr043510 15 luglio 2008.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Argomenti della lezione
Classe III A A.s – 2010 Programma di Informatica
Classe III A A.s – 2011 Programma di Informatica 5 ore settimanali (3 laboratorio) Docenti –Prof. Alberto Ferrari –Prof. Alberto Paganuzzi.
Evoluzione dei linguaggi di programmazione
Procedure e funzioni A. Ferrari.
Procedure e funzioni ricorsive
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Type Checking (1° parte)
Generazione di Codice Intermedio
Algoritmi e Programmazione
Metodologie di Programmazione = decomposizione basata su astrazioni
Fondamenti di Informatica
Università La Sapienza Web programming e programmazione multimediale 1 Web Programming e comunicazione multimediale Lezione 10: PHP.
Anno accademico Il preprocessore del linguaggio C.
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
RB-alberi (Red-Black trees)
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Iterazione enumerativa (for)
PROGRAMMI DI RICERCA E ORDINAMENTO
Esercizi su alberi binari
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi e strutture Dati - Lezione 7
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
Introduzione al linguaggio C++ 5 lezioni
Corso di Informatica (Programmazione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Argomenti della lezione
APPUNTI SUL LINGUAGGIO C
GENERAZIONE CODICE MACCHINA
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Sincronizzazione fra thread
Sistemi Operativi GESTIONE DEI PROCESSI.
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
30 ottobre Mergesort F. Bombi 30 ottobre 2002.
CODIFICA Da flow-chart a C++.
Strutture dati per insiemi disgiunti
LabVIEW LABoratory Virtual Instrument Engeneering Workbench LabVIEW LABoratory Virtual Instrument Engeneering Workbench.
Strutture di Controllo
Servizi Grid ed agenti mobili : un ambiente di sviluppo e delivering
Fondamenti di Informatica e Informatica di base Prof.ssa Elisa Tiezzi
Attività progettuale in Linguaggi e Modelli Computazionali M
Linguaggi e modelli computazionali LS Manni Tiziano
Programmazione Strutturata
Fondamenti di Programmazione
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Allievi Elettrici - AA Le funzioni ricorsive in C
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Scrivere e compilare programmi
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Lo stato  I domini della semantica restano invariati: Ide, Val (Int  { ,  }) Loc (locazioni di memoria), FunctDecl. ma definiamo 2 funzioni: Loc :
1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Strutture di controllo
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

Traduzione automatica di un middleware su ZigBee Andrea Brazzarola vr luglio 2008

Introduzione Lo sviluppo di una applicazione per reti di sensori comporta un elevato sforzo di progettazione a causa delle limitate risorse disponibili e delle forti limitazioni date dallo standard ZigBee/IEEE Lo scopo di questo progetto è quello di fornire un tool per il mapping automatico dell'applicazione SystemC sullo Z-Stack di Texas Instrument, lasciando allo sviluppatore libertà di progetto.

Traduzione automatica su ZigBee Tre concetti fondamentali: Conversione dal linguaggio SystemC a C; Implementazione dei servizi ZigBee OOM; Modifica dell'applicazione per rispettare le specifiche dello Z-Stack.

Traduzione automatica su ZigBee

Creazione della macchina a stati finiti Nella slide precedente si può notare che il corpo principale dell'applicazione ZigBee è dato dalla trasformazione del codice in una FSM, ciò è stato fatto per evitare il rischio di deadlock sulle invocazioni remote. La creazione di una FSM implica la suddivisione del codice in stati e quindi l'implementazione di un algoritmo che riconosca nel codice dell'applicazione AME i punti nel quale creare un nuovo stato.

Creazione della macchina a stati finiti Un nuovo stato deve essere creato quando si incontra un'operazione potenzialmente bloccante, come una chiamata a servizio o un operazione di register/lookup di un nodo. Esiste anche il problema che se la chiamata si trova annidata in un blocco iterativo o condizionale, questi non possone essere interrotti e poi ripresi. Quindi c'è bisogno di dividere in stati anche questi blocchi.

Creazione della macchina a stati finiti La trasformazione inizia con la visita di ogni funzione e procedura, per ognuna di queste viene effettuato il parsing delle sue istruzioni attraverso il metodo parseCode() e nel caso venga trovata una chiamata bloccante verrà creato un nuovo stato; Allo stesso modo, se vengono trovati blocchi iterativi o condizionali verrà creato uno stato ma, in questo caso, si andrà ad analizzare ricorsivamente il codice al loro interno utilizzando il metodo parseIf() o il metodo parseWhile(), mentre i blocchi di istruzioni sequenziali verranno copiati nello stato corrente.

codeToFsm(){ newState = create_newFSM_state(); parseCode(AMECode->INSTRUCTIONS, newState) for each(state) addStatement(return); } parse_Code(instr, newState){ for each (instr) { if(instr.type == CASE_STATEMENT){ newState = create_new_FSM_state(); parse_if(caseObjects, newState) }else if(instr.type == WHILE_STATEMENT){ newState = create_new_FSM_state(); parse_while(whileObject, newState) }else if(instr.type == PCALL_STATEMENT){ newState = create_new_FSM_state(); newState ->AddInstruction_to_FSM_state(instr); newState ->AddStatement(step=step+1); }else if(instr.type == ASSIGN_STATEMENT){ if(instr.type == FCALL_STATEMENT){ newState = create_new_FSM_state(); newState -> addInstruction_to_FSM_state(instr); newState -> addStatement(step=step+1); }else newState -> addInstruction_to_FSM_state(instr); }

parse_if(caseObjects, newState){ for each (caseObjects) { newCaseObject = create_CaseObject(); parseCode(caseObject->INSTRUCTIONS, newCaseObject); newCaseObject -> setCondition(caseObject->CONDITION) newCaseObject -> addStatement(step=step+1); newCaseObject -> addStatement(else{step=counter}); newState -> addStatement(newCaseObject); } parse_while(whileObject, newState){ newCaseObject = create_CaseObject(); parseCode(whileObject->INSTRUCTIONS, newCaseObject); newCaseObject -> setCondition(whileObject->CONDITION) newCaseObject -> addStatement(else{step=counter}); newState -> addStatement(newCaseObject); } create_new_FSM_state(){ newState = newState(); newState -> addStatement(if (step==[counter]){}); counter++; return newState; }

Creazione della macchina a stati finiti Il codice necessario per la costruzione della FSM è situato nei file: CodeToFsm.cpp e CodeToFsm.h Esso è stato implementato in modo da poter modificare un albero HIF ridefinendo il metodo VisitStateObject() di guideVisitor. Ecco come viene trasformato un blocco while: while (COND){if (step == n){ \\Codiceif (COND) { }\\Codice }else step++ }

FINE