L'insegnamento e' tenuto in italiano.
Insegnamento facoltativo per la laurea magistrale in Ingegneria Elettronica, collocato al primo periodo didattico del I anno.
Il corso di Integrazione di Sistemi Embedded è concepito per fornire una panoramica completa sugli strumenti e le metodologie necessarie per progettare e implementare sistemi embedded complessi. Il percorso formativo inizia con la metodologia di progetto. Successivamente. viene trattato il linguaggio di comando Bash, utile per la gestione efficiente dei processi e delle automazioni di sistema, nonché per l'automazione dei processi di sviluppo tramite C++.
Verranno introdotti i linguaggi di scripting, partendo dai fondamentali del Bash e dall'uso di utility come sed, awk e grep, fino al controllo di flusso e alla gestione dei processi, strumentali per aumentare l’efficienza nella gestione e automazione dei sistemi embedded.
Gli studenti apprenderanno anche l'utilizzo di sistemi operativi real-time come FreeRTOS, specificamente applicato alle piattaforme STM32, sviluppando competenze nella gestione dei task, della memoria e nella comunicazione tra task in un contesto real-time, con particolare attenzione alla sincronizzazione e gestione degli interrupt.
A completamento del quadro, verranno affrontati i fondamenti del versioning, essenziale per la gestione delle modifiche nel software embedded, insieme a concetti avanzati come la gestione della memoria, la corretta organizzazione dei progetti e la fase cruciale di compilazione in C, incluso l'uso di Makefiles e tecniche di cross-compilazione.
Il corso si estende anche alla programmazione in C++, dove si tratteranno le strutture dati, le classi e concetti avanzati come l'overloading, l'ereditarietà e il polimorfismo, la gestione dei file e l'ottimizzazione per sistemi a basso consumo energetico.
The course is taught in Italian.
The course is optional for the MSc-level program in Electronic Engineering and will be offered in the first period of the first year.
The Embedded Systems Integration course is designed to provide a comprehensive overview of the tools and methodologies needed to design and implement complex embedded systems. The course begins with project methodology. It covers the Bash command language, which is helpful for the efficient management of processes and system automation, as well as for automating development processes through C++.
Scripting languages will be introduced, starting with Bash fundamentals and the use of utilities like sed, awk, and grep, progressing to flow control and process management, which are instrumental in improving efficiency in embedded systems management and automation.
Students will also learn to use real-time operating systems such as FreeRTOS, specifically applied to STM32 platforms, developing skills in task management, memory handling, and inter-task communication in a real-time context, focusing on synchronization and interrupt management.
To complete the picture, the course will cover the fundamentals of versioning, essential for managing changes in embedded software, along with advanced concepts such as memory management, proper project organization, and the crucial phase of C compilation, including the use of Makefiles and cross-compilation techniques.
The course also extends to C++ programming, covering data structures, classes, advanced concepts such as overloading, inheritance, and polymorphism, as well as file handling and optimization for low-power systems.
- Apprendere la base dei principali tipi di linguaggi di scripting
- Apprendere il linguaggio Bash
- Apprendere la struttura di una applicazione per sistemi embedded
- Apprendere le tecniche di programmazione C specificamente orientate ai sistemi embedded
- Analizzare le prestazioni del firmware di un sistema embedded, al fine di ottimizzare le sezioni critiche dal punto di vista dell’utilizzo delle risorse hardware del sistema
- Gestire un sistema software complesso e in evoluzione, mediante tecniche di versioning
- Sviluppare software in team, con il supporto di software di versioning e multibranching
- Apprendere linguaggio C++
- Knowledge of the architecture of an application running on embedded systems (bare-metal, RTOS or Linux based)
- Knowledge of C and C++ programming techniques oriented to embedded systems
- Ability to write code corrected by definition
- Ability to design an embedded system application
- Ability to profile firmware performances, to optimize hardware resources usage
- Knowledge of automated firmware build tools
- Ability to manage a complex and evolving software system, with versioning
- Ability to develop software in a team, with versioning and multibranching tools
- Ability to develop automated testing and verification procedure for digital architectures through scripting
- Basic knowledge of main scripting languages
- Detailed knowledge of shell languages (Bash)
- Detailed knowledge of object oriented scripting language (Python)
E’ necessaria la conoscenza dell’architettura di un sistema di elaborazione dati. In particolare e’ necessario conoscere l’architettura e i meccanismi di funzionamento di un microprocessore, del sistema di memoria, e dei principali tipi di periferiche (porte seriali, parallele, timer, convertitori A/D e D/A)
Inoltre e’ necessaria la conoscenza del linguaggio di programmazione ‘C’.
E' utile la conoscenza del microcontrollore STM32 e del relativo ambiente di programmazione
Knowledge of the architecture of a computing system is mandatory. In details, the architecture and working principles of a microprocessor must be known, as memory system nad main I/O subsystem ones (serial and parallel ports, timers, A/D and D/A converters)
Besides, the knowledge of C is needed. The knowledge of object oriented programming, as well as C++ is recommended.
- Strumenti per la programmazione di sistemi embedded (1,5 CFU)
- Linguaggi di scripting - panoramica
- Shell (Bash)
- Programmi di utilita’ (sed, grep… )
- Programmazione di sistemi embedded (2,5 CFU)
- Struttura del codice eseguibile
- Struttura di un’applicazione in sistemi real-time
- Processo di compilazione e cross-compilazione
- Automazione del processo di compilazione
- Procedure di test e test units
- Gestione delle versioni
- Strumenti di automatizzazione per i processi simulativi: (2 CFU)
- Caratteristiche del linguaggio C++
- Fondamenti di programmazione ad oggetti in C++
- Utilizzo del linguaggio per l’automatizzazione dei processi di simulazione
- Embedded systems programming (2,5 CFU)
- Executable code structure
- Compiling and cross-compiling
- Bare-metal system application structure
- Real time system application structure
- Boot loader and kernel
- Embedded systems filesystems
- Firmware organization (1 CFU)
- Test procedures and test units
- Building process automation
- Version management
- Firmware deployment
- Scripting languages (2,5 CFU)
- Scripting languages - overview
- Shell (Bash)
- Utility programs (sed, awk, grep, lex, yacc)
- Object oriented scripting for simulation, testing and GUI (Python)
Le esercitazioni in aula riguardano piccoli progetti, relativi a quanto trattato nelle lezioni immediatamente precedenti.
Le esercitazioni sperimentali di laboratorio che comprendono due esercitazioni sul linguaggio Bash per la gestione del sistema embedded, cinque esercitazioni sul linguaggio C in ambiente bare metal, tre esercitazioni sul linguaggio C++ per l’automatizzazione dei processi di simulazione di circuiti digitali
Il numero di esercitazioni previste e' 10 e sono condotte in laboratorio da gruppi di 3 studenti. Le esercitazioni vengono valutate dai docenti durante i laboratori stessi, gli esercizi dovranno essere altresì tramite portale della didattica prima dell'inizio. La media delle valutazioni di tutti i laboratori pesa il 20% della valutazione finale.
Practice classes will focus on small firmware designs (personal calculator required).
Lab sessions consist, in the first part of the course, in the development of firmware applications, according to the methodologies described in classroom, and its test on microcontroller based boards. In the second part lab classes will focus on the use of scripting languages for the design of embedded systems. Evaluation boards will be available to test the designs. Nine lab sessions will be provided by groups of 2 to 4 students. Homeworks are required to prepare the lab sessions. A report is required for the lab sessions and will be considered in the final grade.
I testi che coprono buona parte degli argomenti dell'insegnamento sono:
Learning the bash Shell, Cameron Newham, O'Reilly Media
Mastering Regular Expressions, Jeffrey Friedl, O'Reilly Media
F.Vahid, T. Givargis, "Embedded System Design: A Unified Hardware/Software Introduction", John Wiley and Sons
C++ How to program, Pearson
Sono disponibili copie dei lucidi utilizzati nelle lezioni, e i manuali per le esercitazioni di laboratorio, corredati delle caratteristiche dei componenti utilizzati. Tutto il materiale didattico e' scaricabile attraverso il portale della didattica.
The learning material used for the lessons is made available through the course website. Notes provided by the professor. Reference books:
F.Vahid, T. Givargis, "Embedded System Design: A Unified Hardware/Software Introduction", John Wiley and Sons
M. Lutz, D. Ascher, Learning Python", O'Reilly Media, Inc
Slides; Esercizi; Esercizi risolti; Esercitazioni di laboratorio; Video lezioni tratte da anni precedenti;
Lecture slides; Exercises; Exercise with solutions ; Lab exercises; Video lectures (previous years);
Modalità di esame: Prova scritta (in aula); Prova scritta in aula tramite PC con l'utilizzo della piattaforma di ateneo;
Exam: Written test; Computer-based written test in class using POLITO platform;
...
L'esame consiste in una prova scritta (2 ore) con due esercizi di programmazione inerenti ai linguaggi presentati a lezione (C, C++ e Bash) e una domanda a risposta aperta relativa alla parte teorica. Non è possibile consultare libri o altro materiale durante l'esame.
La valutazione delle relazioni si basera' sulla corretta applicazione della metodologia di progetto presentata in aula, e sulla chiarezza di esposizione di quanto elaborato dai candidati.
L'esame scritto vale l'80% della valutazione finale mentre il 20% viene attributo alla valutazione dei laboratori così come indicato nella sezione "Organizzazione dell'insegnamento".
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
Exam: Written test; Computer-based written test in class using POLITO platform;
Final evaluation is based on a written test covering scripting languages (2h30m) and an oral examination splitted into two parts related respectively to the design of firmware for embedded systems and scripting languages for verification automation. Each one is a 15-20 minutes test, and concerns topics explained in lessons, labs, and homeworks, including written reports. Final result is a weighted average of the two parts. The applicant must be passing grade in both parts.
Condition for oral examination submission is the delivery of written laboratory reports, at least seven days before the official exam day.
Report evaluation is based on right application of the design methodology described in the course, and on clarity of project description.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.