University of Waterloo

CS 452/652 - Real-time Programming

Trains
     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 2024

Important Note for Students Not Enrolled Yet

Official Course Outline / Registrar's Schedule of Classes

Communication

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 for: Private posting is disabled. For any personal matters, please email the instructor.

Accommodations

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.

Assignments

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 16, 9:00amCommunication with Trains and Terminal
K1Kernel (Part 1)Tue, Jan 30, 9:00amContext-Switch, Task Scheduling
K2Kernel (Part 2)Tue, Feb 6, 9:00amMessage Passing, Name Server
K3Kernel (Part 3)Thu, Feb 15, 9:00amEvent Notification, Clock Server
KDKernel DesignTue, Feb 27, 9:00amIn-Class Presentations on Feb 27, Feb 29
K4Kernel (Part 4)Thu, Feb 29, 9:00amI/O Server(s)
TC1Train Control (Part 1)Thu, Mar 14, 9:00amDemo: control one train
ProjectProject ProposalThu, Mar 21, 9:00amsubmitted for feedback, not graded
TC2Train Control (Part 2)Thu, Mar 28, 9:00amDemo: control multiple trains
ProjectFinal ProjectMon, Apr 8, 23:55pmProject Demo

Final Exam

The final exam covers material from the entire course and is given as take-home exam. It is scheduled by the Registrar for Apr 11, 9am - 11:30am. The exam will be made available on Learn on Wednesday, Apr 10, 9am. Previous exams will be made available on Learn as well.

UW Final Exam Regulations
Math Faculty INC Rules

Resources

Lab

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

The Raspberry Pi computers are custom-designed by Devon Merner of CSCF and include a custom serial hat.

Train Set

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

Building and Running Code

Cross Compiler

In the linux.student.cs environment, the cross compiler is installed at /u/cs452/public/xdev/bin/aarch64-none-elf-gcc. The rest of the toolchain (g++, ld, objdump, readelf, etc.) is in the same directory, following the same naming convention.

The cross compiler can also be downloaded from here. Make sure to pick the right host platform and select 'AArch64 bare-metal' as target platform.

Example Code

Sample code is available in the linux.student.cs environment at /u/cs452/public/iotest. Please see the included README file for further information. The example is also available here and as a pre-compiled image for testing.

Uploading

The Raspberry Pis in the lab use TFTP to download an image specific to their MAC address, which is displayed on top of the Pi. An image can be uploaded for a specific Pi using the web interface at https://cs452.student.cs.uwaterloo.ca. Authentication is via standard UW credentials (including possible 2FA).

When hovering over the user name in top-right corner of the web interface and clicking on 'Profile', one can create and/or download an API token. With this token stored in a local plaintext file named $HOME/.cs452_token, the script at /u/cs452/public/tools/upload.sh can alternatively be used to upload an image for a specific Pi by specifying its MAC address. This method only works from on-campus computers or when using UW's VPN.

Make sure to not interfere with another person currently using a particular Pi!

Other

Curiosities