 To understand the architecture of embedded processors, microcontrollers, and peripheral     devices.  To appreciate the nuances of programming micro-controllers in assembly for embedded    systems.  To understand the challenges in developing operating systems for embedded systems.  To learn about programming these systems in high-level languages such as C.