Course Description

In this course we will be studying the theoretical underpinnings of real-time compute systems, as well as practical aspects related to embedded systems. The course covers a wide range of topics, including scheduling theory (analysis and design of task scheduling algorithms and schedulability analysis), resource sharing protocols, real-time operating system principles, fault-tolerance and reliability, and software intensive safety critical systems. Students can expect to get a hands-on experience programming state-of-the-art embedded systems and working with real-time operating systems and industry-strength development tools.


Required: Giorgio C. Buttazzo, Hard Real-Time Computing Systems, 3rd edition. The electronic version of the text is available for full download to UBC students at UBC Library’s webpage.

Optional: Jane W. S. W. Liu. 2000. Real-Time Systems.

Additional readings and material not covered in the text will be posted in readings


There will be 4-5 programming assignments that collectively count towards 50% of your raw final grade. The majority of the projects will involve writing bare-metal and system (kernel) code for the Raspberry Pi Computing Platform, using the C programming language. Students should work in groups (3-4 students per group) to complete the projects. Only one submission per group is expected. We will be using Gitlab as the source control platform, so make sure you setup a Gitlab account as soon as possible. You will be assigned to a Gitlab group, which will contain your private project repositories. You will use Gitlab Wiki pages to write some required documentation and answer project-related questions (in addition to the code-level Doxygen documentation that you will generate for every project).

Many projects will involve embedded programming and require knowledge of material that we will not discuss in class. You will be given all the resources you need, and, as an engineer in a senior year course, you are expected to go through hardware manuals, processor specs, etc, and figure things out on your own. The teaching staff will do their best to provide help and guidance.

Project Equipment

Due to the unfortunate circumstances brought upon us by COVID-19, students are required to purchase their own kits for the projects. The equipment we will need for the project purposes include:

  1. TTL-to-USB Serial Debug Console Cable. Can be purchased at; and
  2. Rapberry Pi B2 Board + power adapter + MicroSD Card (for kernel flashing). A convenient kit including all of these components (and more) can be purchased at

Begin Disclaimer
The teaching staff is not affiliated with AdaFruite or CanaKit. Please feel free to purchase the equipment from any source that best suits your situation. For instance, we understand that some students might be taking the course from outside Canada or even North America, so other purchasing options can certainly be more convenient.
End Disclaimer


There will be 4-5 theoretical assignments, roughly every two weeks. The assignments will count towards 30% of your raw final grade. The assignments should be completed individually, and a submission per student is expected.


There will be only a final exam (written) that counts towards 20% of your raw final grade. The exam is open book. There is no midterm exam.

Grading Scheme

  • Assignments: 30%
  • Projects : 50%
  • Final exam : 20%


You will use the tutorial time to work on the projects and ask any questions. Tutorials should serve as project checkpoints, during which we will discuss your progress. We will also use the time to present some additional material relating to embedded programming, as well as hold some problem solving sessions related to real-time system design (class material).


  • A certain level of proficiency in the C programming language is expected;
  • Operating systems at the level of CPEN 331 will be assumed (both concepts and implementation);
  • Background in algorithms and complexity of computation, typically at the level of CPSC 320. Some knowledge of the theory of NP-Completeness is desirable;
  • It is preferable to have some background in probability theory at the level of UBC’s MATH 318. I might present some of the probability that we will need, depending on the class.

A Statement about the University’s Values and Policies

UBC provides resources to support student learning and to maintain healthy lifestyles but recognizes that sometimes crises arise and so there are additional resources to access including those for survivors of sexual violence. UBC values respect for the person and ideas of all members of the academic community. Harassment and discrimination are not tolerated nor is suppression of academic freedom. UBC provides appropriate accommodation for students with disabilities and for religious and cultural observances. UBC values academic honesty and students are expected to acknowledge the ideas generated by others and to uphold the highest academic standards in all of their actions. Details of the policies and how to access support are available here.

Academic Integrity

You should familiarize yourself with UBC’s policy on student conduct and discipline. The penalties for cheating are serious: you can fail a class, receive a letter of reprimand that will also appear on your university record, be suspended or be expelled. If you are feeling stressed, come talk to the instructor or the TAs to get help – at the posted office hours, or make an appointment. Do not be afraid to come in and say you’re confused, we are here to help you get “unconfused.” Of course, it is good to come talk to us before you are completely overwhelmed. You should also read Tamara Munzner’s writeup on Cheating: The List of Things I Never Want To Hear Again.