Circuit board Photo Courtesy of Michelle Meiklejohn

Overview

Embedded and Real Time Software is a course about creating software for embedded systems where real-time constraints might be involved. Most processors today are in embedded systems. Cars often involve hundreds or more networked processors. Computers are embedded in everything from thermostats to toasters. Many safety-critical systems, from airplanes to nuclear power plants, involve real-time embedded systems.

The course itself will teach a combination of theory and practice. There will be a semester-long project which can be done individually or in teams. There will be two programming assignments, one emphasizing embedded software and one emphasizing real-time software. The course will also cover a significant amount of the underlying theory of real time and embedded software including modeling, scheduling, and verification. There may be homework assignments covering these and they will be covered on the final exam.

By the end of the course you should have the satisfaction of having built an actual embedded system and you will be familiar with the methods, techniques, and terminologies associated with real time and embedded software. You will also learn about hardware (real hardware that involves things like resisters and capacitors as well as logic circuits), operating systems, and other related topics.

The first lecture will be on Wednesday, September 6 at 11AM in Lubrano (CIT 477). See you there!

Course Mechanics

The class will meet Monday, Wednesday and Friday from 11:00 to 11:50 in Lubrano (CIT 477). Students are encouraged to attend each class.

The text for the course is Introduction to Embedded Systems (Second Edition) by Edward Lee and Sanjit Seshia. This text is available both at the book store and on-line at http://leeseshia.org as a free download.

We will be going through most of the text. However, the text is more oriented toward a theoretical course while we are going to be teaching a more practical one. In order to let you start on the final project and the programming assignments early in the semester. Other than this, we will mostly go through the text sequentially. Assignments from the problems in the text will be used as appropriate and if needed. (Even if they are not assigned, you are encouraged to look at and understand the assignments since being able to complete them will be helpful when taking the final.) The various readings are noted in the schedule as are the topics, assignment due dates, and project due dates. All items here are subject to change.

We will also cover some material that is outside of the text. Much of this will be practical (e.g. how to use an Arduino; reading and understanding circuit diagrams), but some will be theoretical material not in the text that is useful for understanding embedded systems (e.g. queuing theory and fault tolerance).

Materials

It is suggested that you purchase the following hardware components as a starting point for the labs and projects. Links to each item are provided as examples—you do not need to purchase the exact parts listed here, as long as you have something similar.

Other helpful parts include LEDs, switches, and jumper wires–links for example parts will be posted soon. If purchasing parts presents some difficulty, we have a collection of parts that we are willing to loan. If you have any questions about purchasing components, please feel free to contact the TA.