Embedded systems dramatically enhance our lives and are prolific in our everyday life. It is not uncommon for us 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 communication technologies (CAN,WIFI, Bluetooth, ZigBee, etc.) will be surveyed and at least one implemented during the courses. A great emphasis will be put on good programming practices and design patterns which support working in large groups.