University of Waterloo

CS 452/652 - Real-time Programming

     I hear the train a comin'
     It's rollin' 'round the bend
     And I ain't seen the sunshine
     Since I don't know when...

     Johnny Cash
Photo courtesy of y3285wan (W23)

Winter 2023

Important Note for Students Not Enrolled Yet

Official Course Outline

Registrar's Schedule of Classes


Piazza is used as the primary communication channel for announcements, clarifications, questions, discussions, etc. It is expected that all students are familiar with all material posted and discussed on Piazza. There are different Q&A folders for (more might be added as needed):

For any personal matters, please email the instructor.


If a student needs to self-isolate due to COVID protocols, individual adjustments will be made to assignment deadlines and/or weighting depending on the particular circumstances.

Lecture Notes

Lecture notes will be posted here after class. They are telegraphic, so they are not a substitute for the lectures. But if you attend the lectures they will most likely be a good memory prosthetic.


Assignment A0 is to be completed independently by each student. Afterwards, groups of 2 students (or 3 in exceptional circumstances) work on the remaining assignments.

IMPORTANT: Late assignment submissions will not be accepted. Plagiarism detection software will be used. Students might be asked to meet with TAs and explain their code. See below for further information about academic integrity and appeals. Also see Notes on Assignments.

Due dates below are tentative until the assignment is published.

AssignmentLink to AssignmentDue DateNotes
A0Polling LoopTue, Jan 17, 9:00amCommunication with Trains and Terminal
K1Kernel (Part 1)Tue, Jan 31, 9:00amContext-Switch, Task Scheduling
K2Kernel (Part 2)Tue, Feb 7, 9:00amMessage Passing, Name Server
K3Kernel (Part 3)Thu, Feb 16, 9:00amEvent Notification, Clock Server
KDKernel DesignTue, Feb 28, 9:00amIn-Class Presentations on Feb 28, Mar 2
K4Kernel (Part 4)Thu, Mar 2, 9:00amUART Server(s)
TC1Train Control (Part 1)Thu, Mar 16, 9:00amDemo: control one train
Final Project - ProposalThu, Mar 23, 9:00amsubmitted for feedback, but not graded
TC2Train Control (Part 2)Thu, Mar 30, 9:00amDemo: control multiple trains
Final ProjectMon, Apr 10, 9:00amDemo

Final Exam

The final exam is scheduled by the Registrar. It will cover material from the entire course. The final exam will be given as take-home exam. 24 hours before the registrar-scheduled start time. Exam answers have to be submitted by email to the instructor at the scheduled end time (i.e., after 26.5 hours).

Since the final exam slot is on a Monday, the final exam will already be made available on Learn on Saturday, Apr 15, 9am. Previous exams are available on Learn.

UW Final Exam Regulations
Math Faculty INC Rules



The lab room is MC 3018 and is for the exclusive use of CS 452/652 students. The access code is announced in class. Do not give the code to other students! The usual rules apply, such as no food. Please see CSCF Teaching Lab Policies for details.

Most workstations in the main room run Ubuntu Linux with access to the regular linux.student.cs environment. The workstations connected to the Raspberry Pi computers run a slightly different Linux setup with a default login. Two of those are connected to train tracks. You can use the gtkterm terminal emulator to communicate with the Raspberry Pi via serial interface.

Raspberry Pi

Train Set

The track and trains are controlled by sending commands via the serial interface.


cross compiler:/u/cs452/public/xdev/bin/aarch64-none-elf-gcc
example code:/u/cs452/public/iotest/