Programming languages for embedded systems: desirable characteristics of programming languages for embedded systems, low-level versus high-level languages, main language implementation issues: control, typing, exception handling, modularity and multi-threading. Major programming languages for embedded systems: Assembly, C/C++, Ada, Java and Esterel. Timing characteristics of embedded systems: hard, soft and firm systems; fail-safe and fail-operational systems. Guaranteed-response, best-effort, event and time-triggered systems. Timing constraints in embedded systems. Performance analysis of embedded systems: software timing characterization and analysis methods. Runtime and Operating systems: real-time and non-realtime applications. Task assignment and scheduling: characteristics of tasks, task assignment and multi-tasking. Static and dynamic scheduling under constraints. Memory management and synchronization for embedded software: mutual exclusion, deadlock, starvation and lockouts; priority assignment, inversion; event flags and signals. Software optimization techniques under constraints: size, performance, embeddability metrics. Compilation techniques for embedded software: code generation, retargetability, code optimization. Examples of embedded and real-time software systems. Real time databases: transaction handling and consistency management.
Prerequisite: CSC 3114