embedded software organization (FSM-based program design, polled loop systems, foreground- background systems, event driven architectures, multi-tasking, etc.), real-time scheduling and real-time operating systems, wired/wireless networked embedded systems, debugging techniques for embedded software memory-safe programming, implementing reentrant functions, and minimizing code space, memory usage, and power consumption.