[MUSIC] In one sentence, a real-time system is one in which the correctness of the system depends not only on the logical results of computation, but also on the time at which the results are generated. This means that they both have to look at the output of the system and at the time at which the output was generated to determine whether an execution is successful. In fact, almost all types of automated systems we use in daily life is some kind of real-time system. The most common one you might think of are digital control systems for cars and airplanes, and machinery. And here we have a lot of critical functionality, which makes sure that the systems can be safely operated without putting the user into danger. There are also embedded real-time systems in the medical field. And one important example here is of pacemaker, which helps the heart maintain a steady pace. Things usually hidden from the everyday user are the telecommunication systems for Internet and mobile phones. Such systems must deliver data packages at a certain rate to be useful, and are therefore also real-time systems. We have also the entertainment and multimedia systems, which today are real-time systems mostly because of streaming capabilities from DVB broadcast or the Internet. A typical property of embedded systems is that they are hidden from the user. You mostly notice embedded systems when they are not working and this can sometimes even pose a danger to the user. Of all computer systems in the world, about 98% of them are embedded systems and many of them are real-time systems. So, this is certainly an area worth exploring. For example, the electronic control units or ECUs in luxury class cars were only two in the mid-80s cars. Then in the 90s, cars started to use more electronic control systems and ECUs grew to about 7 and then rapidly to 30 in the early 2000s. Car manufacturers have since then started to reduce the rapid growth of ECUs because of cost, but the number of ECUs is still growing and the number soon reaches 100. An Airbus A380 has 10,000 sensors in each wing. And a computer system in such an airliner generates 2.5 terabytes of data each day. 2014 was the first year with more than 100,000 flights every day and this number is still growing up. So even with these numbers, airliners not often crash due to the very sophisticated real-time systems controlling elevators and rudders for pitch and yaw. The ailerons for roll and flaps, and slats, and spoilers for aerodynamics, and all this thing is done via fly by wire. So this means that the computer is ultimately in charge of the airliner. A simple control system for actuation is the PID controller. It works so that we have a plant, which is the actual system to control. We have a sensor, measuring the results from the plant, and this is then compared to the set point telling us what the result was supposed to be. We can then calculate the difference between the set point and the actual value, and use control-law for the PID controller to adjust the system in order to have a result closer to the set point at the next measurement. An actuator steers, then, the plant in the direction told by the PID controller. For example, the ailerons on an airliner are continuously adjusting the roll of the aircraft. So, it's stable and it's not tipping over. The PID controller adjusts the actuators by first reading the sensors monitoring the plant. It has a memory, which stores the information about parameters from all iterations. And dynamic parameters, which tells how much to adjust the actuator compared to the input. The PID controller calculates the deviation e(t) as a difference between the reference, r(t) and the measured value, y(t). This is then stored as the error value. A PID controller can be implemented in C with only a few lines of C code. The C function takes the error as an argument called In. And In is then multiplied with P, I and D_gain parameters. And some of those is then calculated. Then the state variables are updated for next iteration and the sum variable Out is returned. In its simplest form, the PID controller can be implemented with only 10 to 20 machine instructions. And yet, provide a very powerful and stable control system. In this course, we're going to learn how to build these things. You will learn how to design a real-time system. You will learn how to implement a real-time system in practice, and you will learn how to verify a real-time system. For this, it is recommended that you have some basic knowledge about operating systems in general. Also, a bit of C and Python is good to have here. We will often refer to computer architecture, so it is recommended that you have such a course in your backpack. And we will use the book of Liu as our reference and a free RTOS kernel as our implementation environment. Some assignments will require some simulations, so please have a look at the SimSo simulator for this. So, now we are ready to actually begin the course.