Embedded systems dramatically enhance our lives and are prolific in our everyday life. It is not uncommon for Americans to come in contact with over one hundred embedded systems each day. With billions of embedded systems, being produced each year there is a huge need for engineers who can create good embedded software. This course focuses on embedded software for applications running directly on an embedded processor without an operating system. A brief survey of microcontroller technologies will be covered but the class will focus on ARM microcontrollers and the embedded peripherals available on such devices. Advanced embedded communications technologies (CAN, WiFi, Bluetooth, ZigBee, etc.) will be surveyed and at least one implemented during the course. A great emphasis will be put on good programming practices and design patterns which support working in larger groups. Additionally, students will learn project management skills and will be required to manage a team of undergraduate engineers to accomplish a real world embedded system project.