The goal of the course is to provide the necessary knowledge on design methodologies and tools necessary to develop system and application software for embedded applications.
Despite the presence of embedded systems is almost “invisible” with respect to general purpose computing systems like PCs, they account for around two-thirds of the microprocessors market. Example of such systems are bio-medical devices, automotive electronics, industrial control systems, set-top-boxes and, in general, most of the consumer electronics. The main topics presented during the course cover: review of documentation and architectures of the SoC for embedded applications, the use of development tool-chains for writing and verifying the embedded software, the development of device drivers, interfacing with external sensors and peripherals and the management of the cores and concurrency as exposed by the operating systems for embedded applications.
During the course some hands-on sessions will be proposed (participation is on a voluntary base) to show how to put in practice the topics covered during the course. The goal is to make the students familiar with STM/ARM development boards provided by the lectures for the realization of small projects. Given their widespread availability, Linux and Android will be the reference for most of the examples.
Note that the course Advanced Operating Systems (AOS) can be followed without the requirement to include also the course Embedded Systems 1. In fact the focus of AOS is on the development of the system and application software, including real-time aspects, while the other course is tailored to present the architectures, design methodologies and toolchains to manage the development of embedded applications.
Introduction and background
General characteristics and roadmaps of the embedded systems
Peculiarities of the applications and system software for embedded systems
Mastering MCU data sheets: programmer's model (ex. ARM, STM32)
Example of main showstoppers: energy of software, system-level power management, memory footprint, reactivity
Management of competition and concurrency
Scheduling of CPU for mono and multi-many core architectures
Frameworks for the run-time management of resources
Access to shared resources: management of deadlock and starvation, primitives for IPC in systems with processes and threads.
Software development for dedicated applications
Main abstractions: assembler, source, libraries, system software, firmware, middleware
Real-time operating systems: general characteristics, limits of traditional schedulers, configuration, user control
CPU startup: Exception vector and Interrupts, C runtime initialization, role of boot loader and kernel initialization (ex. with ARM and STM32)
Interfacing external devices (e.g. UART, Bluetooth), management of interrupts and GPIOs
Software development and management of code (e.g. GIT, GCC, Shell)
Tools for analysis/profiling of embedded code (e.g. STM Studio, Keil)
Examples based on Linux and/or Android
Introduction, sources organization and tools, Loadable modules
Memory management, I/O memory and ports, Char devices and File operations
Concurrency, Advanced Char Drivers and Time management
Processes and scheduling, Sleeping and Interrupt management
Interfacing external sensors
Type and characteristics of commercial sensors
Use of standard protocols (SPI, I2C) with a MCU and interface to the analog world
Examples of interfacing photodiodes using ADC, 3-axes accelerometer via SPI
Management of time and timers
Example of real implementations under Linux and possibly other operating systems (e.g. FreeRTOS, BeRTOS, ...)
In depth analysis of MIOSIX, a lightweight open source operating systems
Some hands (optional) under the supervision of the assistants are foreseen to familiarize the student with the development of application by exploiting real development platforms.