Real-Time Programming Languages

  • Master EI and Master Robotics, Cognition, Intelligence
  • 6 ECTS Lecture -- not a lab!
  • English
  • Winter term only
  • includes interactive tutorials, programming exercises and lab work
This module's word cloud (created by participants of WS17/18)

Embedded systems in a safety-critical context, e.g., controllers in automobiles, software in airplanes and industrial plants, have to work reliably and under timing constraints. Such systems require a level of integrity and availability for which traditional mainstream programming techniques fail to provide appropriate means, let alone guarantees. As a result, programming languages with strict semantics and inherent support for timing have been evolving. They introduce programming models specifically targeted towards safety-critical and real-time systems. The aim of this module is to introduce the basic principles for programming such real-time systems, and to gain practical skills with relevant programming languages and verification tools.

First we study why real-time software substantially differs from Desktop applications, and how the development workflow has to be different from Desktop applications. Then we introduce the predominant real-time programming paradigms and highlight their differences. For each of the paradigms we learn the basics of one programming language, in which we solve various programming tasks in the lab. Finally, we explain the theory of functional and temporal verification of real-time software, and try them out in practice. In this process, we gain a deep understanding how the architectural features of a target platform influence both the temporal and functional correctness of the software, and how both can be analyzed and formally proved.

Preview:

  • Ada/SPARK programming language (here)

Schedule

Time slots: Tuesday, 10:30 - 13:00 (lecture room 3999) and 14:00 - 16:30 (lab/tutorial, 0509 4th floor).

Date

Contents Lecture Contents Lab
16/10/18 Introduction Workflows for Real-Time Systems and Lab Introduction
23/10/18 Esterel (1) Esterel: basics
30/10/18 no lectureno lab
06/11/18 Esterel (2) Esterel: advanced
13/11/18 no lecture no lab
20/11/18 LustreLustre: basic programs

27/11/18

Synchronization & SchedulingLinux Processes & Scheduling
04/12/18Ada: Basic ElementsAda: Basics
11/12/18 Ada: High-Integrity Systems & Tasking Ada: Multi-threaded programs

18/12/18

Model Checking Lustre+Esterel: verification

08/01/19

Ada: Verification / SPARK Ada: Verification

15/01/19

Processor Architecture + Timing Analysis WCET: Lustre vs. C (vs. Ada), Performance Measurements on ARM, Intel & AMD

22/01/19

Advanced Esterel SCADE
29/01/19 Q & A: Please bring questionsno lab
05/02/18 Final Exam no lab

Examination

The final grade is composed of the following two components: - homework (40%): implementation tasks with the programming languages presented in the lecture, to evaluate whether students are able to develop simple software programs in each of the programming paradigms and whether they are able to use verification tools in practice. The homework consists of source codes to be submitted, and an associated report that explains the solution and how verification was applied. - written exam (60%): The written exam evaluates whether the students are able to differentiate between real-time and general-purpose systems, characterize different real-time programming paradigms, are able to describe the theoretic foundations of the verification techniques, and whether they are able to identify sources of variance of execution time on a given processor. The tasks are a mixed collection of calculation tasks, definition/explanation tasks, code interpretation tasks and multiple choice questions.

Links

Note: Scheduled contents may change without prior notice.


We are a member of the GNAT Academic Program of AdaCore