CMU 14-642 Introduction to Embedded Systems
14-642 is a graduate-level embedded systems course offered by the Information Networking Institute at Carnegie Mellon University.
This practical, hands-on course introduces students to the basic building-blocks and the underlying scientific principles of embedded systems. The course covers both the hardware and software aspects of embedded processor architectures, along with operating system fundamentals, such as virtual memory, concurrency, task scheduling and synchronization. Through a series of laboratory projects involving state-of-the-art processors, students will learn to understand implementation details and to write assembly-language and C programs that implement core embedded OS functionality, and that control/debug features such as timers, interrupts, serial communications, flash memory, device drivers and other components used in typical embedded applications. Relevant topics, such as optimization, profiling, digital signal processing, feedback control, real-time operating systems and embedded middleware, will also be discussed.
In taking and completing this course, students will:
Labs are the primary component of the 14-642 course and the basis for the majority of the course learning objectives. Labs can be done individually or with a partner, using starter code templates made available by the course staff via GitHub.
The course includes a total of 21 lab exercises of widely varying difficulty and follow the narrative of an instructor-provided textbook, starting from a clean-slate and ending with an embedded kernel capable of supporting multi-threaded, real-time user applications. A listing of the focus of each lab exercise is included here.
After these lab tasks are completed, students have the opportunity to design their own interactive embedded system, potenially introducing additional hardware and peripheral device support, further expanding the system call interface, designing and profiling multiple user-space tasks, and integrating the hardware and software capabilities with a fully functional application.
This course uses GitHub to initialize and maintain students’ code repositories for the labs. Early lab exercises include pre-built executables for testing interfaces and basic functionality, but much of the more advanced functionality must be evaluated via demonstration and manual testing by the course staff, along with manual grading of all documentation components.
Please direct questions about the 14-642 course to Patrick Tague.