This course is an introduction to systems that sense and interact with the world in a physical way (e.g. medical devices, robots, cars, etc.). The success and safety of these systems critically depend on their ability to react to the environment in an appropriate and timely manner, thus they are referred to as real-time systems. Software development requires an understanding of system architecture, modeling, scheduling, and low-level hardware control of sensors and/or motors. In addition, real-time systems are often safety-critical and embedded (i.e. implemented on a microprocessor) further complicating development. Concepts learned in this course are applicable to a broad range of non-PC systems including smart phones and video games, to name a few.There are 3 primary goals for this course:
- To understand similarities and differences between desktop and embedded systems.
- To understand basic principles and a few widely used methods for real-time scheduling, system safety, and hardware/software co-design and cross-development.
- To understand enough terms and references to know where to start looking.
Towards these goals, we will cover periodic task models, static and preemptive priority scheduling, and schedulability analysis for uni-processor systems, with some introduction to multi-resource scheduling (distributed systems, multi-core processors). There will be an introduction to the basic concepts and processes of system safety, how verification and fault-tolerance fit within this umbrella, and the role of regulatory agencies and certification standards. Finally, some basic concepts of hardware/software co-design and cross-development will be given, with discussion of some of the pragmatic issues that arise. Theoretical concepts will be reinforced with a hands-on lab, in which students will program an embedded system.