Exploration of the principles, methods, and techniques for building hard and soft real-time embedded systems. Real-time operating system considerations including resource management, scheduling, performance, concurrency, and dependability. Interaction with devices including memory management, device drivers, communication buses, and networks. Embedded software development, testing, and analysis. Embedded hardware design including embedded processor architectures, reconfigurable devices, and SoCs. Application-level concepts common to embedded systems such as signal processing, image processing, computer vision, sensor networks, and feedback control will be incorporated as relevant to hands-on course projects.