Revised Sept 10, 2015

CS 452: Real-Time Programming

Watch a video introduction to this course on YouTube.

General description

Students design and implement a real-time multi-tasking operating system using the tools and techniques of real-time programming for embedded systems. Implementation uses cross-compilation for an ARM-based system-on-chip. The operating system then supports an application program involving process control, data acquisition, and communication.



  • CS major students. Usually taken in fourth year. This course benefits students interested in applied computer science, operating systems, or control and calibration.

Normally available

  • Winter and Spring*

*Enrollment may be limited due to lab room capacity.

Related courses

  • Pre-requisites: CS 350 or SE 350; Computer Science students only

For official details, see the UW calendar.

Software/hardware used

  • GCC cross-compiler for ARM
  • Technologic, TS-7200 development boards

Typical reference(s)

Required preparation

At the start of the course, students should be able to

  • Write programs in C.*
*Students develop programs to run on an Intel microcomputer system. Programs are written and cross-compiled on a host computer running UNIX and downloaded for execution on the microcomputer system. No prior knowledge of the Intel architecture is assumed and documentation is provided.

Learning objectives

At the end of the course, students should be able to

  • Design and implement moderate sized (~10K LOC) application programs
  • Design, implement, and use debugging tools for multi-tasking programs, particularly critical races
  • Program in assembly language directly on the hardware
  • Participate in and maintain a pleasant social environment in the laboratory
  • Work effectively as part of a team
  • Create and perform an effective demo

Typical syllabus

Real-time systems (2 hours)

  • Introduction to real-time systems
  • Definition of the concept of a process

Concurrency and CPU multiplexing (3 hours)

  • Review of concurrency and CPU multiplexing
  • Implementation of a simple application using the concept of cyclic execution to provide concurrency

Real-time operating system (12 hours)

  • Implementation of a simple but powerful real-time operating system kernel providing support for multiple processes, inter-process communication and synchronization via message passing, and interrupts

Process structuring techniques (9 hours)

  • Design of those parts of the operating system that provide services to application programs
  • Stereotypical task capabilities: servers, clients, workers
  • Task structuring for application programs
  • Pathologies: deadlock, performance problems
  • Debugging

Application (6 hours)

Students design and implement an application, running on their operating system, that controls several trains doing independent tasks while sharing a single track. Students gain knowledge of the following:

  • Calibration, building a computational model that maps accurately onto train kinematics
  • Real-time fault tolerance, building algorithms that maintain time consistency in the presence of hardware faults
  • Sensor attribution, assigning sesor reports to the correct real-world entity
  • Mutual exclusion in an unreliable world

Other topics (6 hours)

  • Other approaches to the design of real-time systems
  • Language support for real-time concurrent systems: Golang
  • Type-safe communication
  • Multiprocessors, scheduling