Design and coding of embedded programs. Real-time constraints and management of resources. Practical I/O interfaces and protocols, polling, interrupt maintenance, atomic code, blocking and non-blocking tasks. Static and dynamic task scheduling under real-time and limited resource constraints.