04-801-M2 Principles of Embedded Software
Location: Africa
Units: 6
Semester Offered: Intermittent
Location: Africa
Units: 6
Semester Offered: Intermittent
ECE
Sitting at the center of modern industrial processes, transportation, medicine, and consumer devices, embedded systems are already ubiquitous, and of growing importance. As more devices and processes connect in more sophisticated ways to the Internet, the demand for complex embedded software is likely to increase. This course provides students with a foundation in the software engineering principles necessary for embedded systems, and as such, will focus on developing a strong understanding of the C programming language as it is used in professional embedded software. The course will break down the interactions between software and hardware; study the implications of the C programming language to the underlying architecture; provide C programming applications; and instill efficient, high-performance, and robust software design techniques. Testing and debugging practices will be developed and refined.
The course will maintain a strong hands-on focus, with roughly biweekly individual coding assignments performed on an embedded development board. After completing the course, students will be well situated to pursue further study and eventually a career in embedded software development. Student progress is assessed by performance on the assignments and classroom participation.
Students will be introduced to important features of the C programming language, including integer representation, pointers, structures, arrays, and strings. Students will learn about how the embedded toolchain works and will be introduced to ARM assembly language. After developing a firm grounding in the C language and the toolchain, we will move to introduce some of the subsystems common on many microprocessors: GPIO, timers and counters, PWM generation, I2C, and UARTs. Throughout the course, we will develop insights into robust software engineering practices; when and how to optimize; strategies for testing; and techniques for debugging.
Upon completing this course, students will be able to:
None