REAL TIME SOFTWARE DEVELOPMENT

Degree course: 
Corso di Second cycle degree in COMPUTER SCIENCE
Academic year when starting the degree: 
2018/2019
Year: 
1
Academic year in which the course will be held: 
2018/2019
Course type: 
Compulsory subjects, characteristic of the class
Language: 
English
Credits: 
6
Period: 
First Semester
Standard lectures hours: 
56
Detail of lecture’s hours: 
Lesson (40 hours), Exercise (16 hours)
Requirements: 

To fruitfully attend this course, students should be familiar with the topics taught in Computer architecture, Operating Systems and Cuncurrent programming courses.
A fair knowledge of the C programming knowledge is also required.

Final Examination: 
Orale

Exams
Students are required to develop a real-time software systems that satisfies the requirements given by the teacher, and to give an oral exam.
The project involves developing a system of small size, but realistic complexity, and requires that the student identifies the relevant characteristics of the problem, chooses a proper implementation strategy and implements it correctly, so that all requirements (especially the real-time ones) are satisfied.
The provided solution has to be properly documented.
The execution of the project is worth 30 points.
The oral exam verifies that the student knows the problems, techniques and methods taught during the course and is able to illustrate them. The oral examination changes the project grade of no more than three points.

Assessment: 
Voto Finale

Objectives
In this course, the issues connected with developing real-time software are addressed. The development activities considered span from requirements specification to the design and implementation of systems.
real-time software has peculiar characteristics that make it quite different from "traditional" software.
To deal with these characteristics, special purpose platforms have been developed to support the execution of real-time software: ti use these platforms, developers need to know the characteristics of real-time software and how to deal with them.
Therefore, this course illustrates issues that typically arise in real-time and embedded systems, a selection of techniques, methods and tools that are suitable to build real-time software systems.
It is expected that students will learn what follows.

Knowledge and understanding
Knowledge of the characteristics and issues of real-time systems that make them different from "regular" software systems.
Ability to read and understands the data sheets of microcontrollers and embedded peripherals.

Applied Knowledge and understanding
Knowldege and ability to apply real-time design methodologies.
Knowldege and ability to apply real-time programming techniques.
Ability to describe real-time systems, including both the environment and the hardware/software machine.

Autonomy of judgment
Ability to identify the best implementation strategy, according to requirements and constraints.
Ability to learn new techniques, methods and tools, and to enhance and refine the notions acquired in this course.

Communication abilities
The students will learn to understand and use the formalisms that are commonly used to describe, analyze and design real-time software systems.

Contents
Introduction to real-time systems: characteristics and problems. Implementation of a simple real-time system. [4 hours]
Basic I/O [5 hours]
Cyclic executives on bare hardware [2 hours]
State machines as a design tool. State machines as a programming tool (how to convert a machine into code). [4 hours]
Multi-tasking: why and how. Inter-task communication. Task synchronization. [4 hours]
Real-time executives [2 hours]
I/O interfaces [2 hours]
Structured design for RT. [2 hours]
Design of multi-tasking systems [2 hours]
Object-oriented design of real-time systems. UML for real-time systems [3 hours]
Scheduling – Priority scheduling, Priority inversion, Technique to prevent or solve priority inversion. [2 hours]
Scheduling in presence of deadlines - Earliest Deadline First, Least Laxity. Periodic scheduling. Scheduling in overload conditions. [2 hours]
Scheduling – Rate Monotonic Analysis [1 hour]
Introduction to the uVision development environment and examples of usage. [5 hours]
Laboratory 1 A simple project illustrated [4 hours]
Laboratory Autonomous development of a simple project [12 hours]

Books and didactic material
The following books will be used as references:
Rob Williams, “Real-Time Systems Development”, Butterworth Heinemann, 2005
Andy Wellings, “Concurrent and Real-Time Programming in Java”, Wiley, 2004
On the e-learning site the following material is available:
- the data sheets of the microcontroller and integrated peripherals used in the lab
- the manuals of the libraries and the firmware used in the lab
- the manuals of the RTX executive
- the code of all the examples shown
- the solutions of a selection of proposed problems

Convenzionale

Didactic activities
The course consists of frontal lessons (40 hours) and laboratory sessions (20 hours).
The lessons aim at illustrating the problems of real-time software development, and the techniques, methods and tools used to tackle such problems.
Lab sessions are used to involve students in the actual development of a real-time system, using a development and simulation tool (KEIL μVision).
The students develop programs for an ARM microcontroller (namely, ST Microelectrics STM32F10x) using real-time executive RTX.
The effort that students are expected to spend is 25 hours per CFU.

Office hours: by appointment.