Embedded computing applications far outnumber desktop computers, with billions of microcontrollers produced worldwide each year. Embedded systems vary tremendously, from the single 8-bit processor in a thermostat, to high performance processors in a digital camera, to dozens of networked processors in an automobile. Despite this diversity of applications, there are core technology and system-level skills needed by any embedded system designer that form the content of this course. The emphasis of this course will be at the system layer where hardware meets software, with plenty of hands-on experience at "bare metal" programming. Topics typically covered include embedded computing platforms (hardware, microcontroller instruction sets, software in both assembly language and C); interacting with the external world (analog I/O, digital I/O, serial ports, filtering, control, embedded networks); system-level engineering (design cycle, architectural patterns, peer reviews); real-time operation (timers, interrupts, concurrency, task switching, writing a simple RTOS kernel, scheduling); constraints and optimization (economics, power, performance); and a survey of techniques important for building systems that work in the real world (debug, test, robust design, dependability, safety, ethical/societal issues). Weekly hands-on hardware and software experiences with a 16-bit microcontroller module will tie directly to lectures to reinforce core skills.
4 hrs. lec., 1 hr. rec., 3 hrs. lab.