Introduction to Embedded and Real-Time Software

CSCI1600, MWF 10-10:50, CIT 506

Introduction

Embedded and Real Time Programming 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 100 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.

Course Mechanics

The text for the course is Introduction to Embedded Systems 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 on, we will be going through the text in a semi-random order.  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, fault tolerance and security). 


We will provide hardware for doing the assignments.  You are free to purchase your own hardware as well.  If the hardware is provided by Brown, you are responsible for returning it at the end of the course so it can be used again the next time the course is taught.

Project

Much of the course will involve a student-chosen project that involves real-time and/or embedded software.  This project can be done either individually or in teams.  The project schedule is roughly:

DATE

PROJECT EVENT

9/10

Presentation of project ideas, team recruitment, feedback.

9/14

Initial project description and a tentative hardware budget

9/21

Final project description along with detailed hardware budget

10/12

Project design status reports

10/31

In-class presentation of project designs

11/19

Implementation status reports

12/7

Project due

12/10

Public project demonstrations

You can either have the department purchase the hardware for your project or you can purchase it yourself.  If the department purchases it, then you are responsible for returning the equipment in usable shape.
Projects can involve anything you are interested in, ranging from wearable clothing to music processing to games to intelligent appliances or devices.  Projects may (but need not) involve a real-time component.  We will discuss project scope and limitations in class.

Syllabus

The syllabus found here.