Embedded software architecture: design reliable, modular and scalable embedded systems.
Hands-on with layered architectures, component design and UML modeling.
Apply modern C++ practices to embedded constraints and real-time systems.
Gain practical experience through ~70% labs building embedded designs.
How this helps: improve maintainability, testability and performance of embedded software.
Who it’s for: designed for individuals with C/C++ experience in embedded projects.
Includes optional coverage of advanced patterns and architecture trade-offs.
Curriculum
Day 1 — From requirements to architecture (embedded realities)
- Problem framing and stakeholders; quality attributes (safety, performance, availability, energy)
- Requirements capture and traceability (use cases, non‑functionals, interface contracts)
- Context, hardware constraints, memory/CPU/energy budgets; early risks and ADRs
- Architecture views: context, containers/components, deployment; mapping to target
Day 1 — Structural modeling for embedded systems
- UML with Enterprise Architect: packages, components, deployment and class diagrams
- Layers and boundaries: application, services, drivers; HAL/SAL patterns; portability seams
- Dataflow and concurrency model (event‑driven vs time‑triggered; task graph)
- Interfaces and contracts: APIs, error codes, pre/postconditions
Day 2 — Behavior, timing and real‑time design
- State machines done right (hierarchy, Mealy/Moore, mode management, reentrancy)
- Sequence/activity/time diagrams for message flow and timing budgets
- Scheduling: periodic/sporadic tasks, rate‑monotonic vs. EDF, cooperative vs. preemptive
- Priority inversion and ceilings; partitioning across cores; estimating WCET
Day 2 — Embedded C/C++ design techniques
- Resource ownership and RAII; smart pointers vs. static storage; pimpl and interfaces
- Static vs dynamic polymorphism; CRTP; constexpr and configuration at compile time
- Fixed‑point math; memory pools, ring buffers and zero‑copy pipelines
- ISR‑safe code and DMA patterns; volatile, atomics, alignment and endianness
Day 3 — Hardware access, portability and startup
- Memory‑mapped I/O and register access patterns; bitfields and masks safely
- Drivers vs. services; CMSIS‑style headers; device trees (overview where relevant)
- Boot sequence and initialization; secure boot basics; linker script essentials (overview)
Day 3 — Reliability, diagnostics and testing
- Error handling strategies; watchdogs and brown‑out; graceful degradation
- Logging/tracing; event logs and performance counters; telemetry hooks
- Static analysis and MISRA C/C++; unit/integration tests; SIL/HIL and fault injection
Day 3 — From model to code skeleton
- Map model to modules and folders; dependency rules; public vs private headers
- Build system (CMake) and toolchain integration; feature flags and variants
- Generate an application skeleton; wire first use case and CI smoke tests
Optional modules
Optional — Safety & security accents
- ISO 26262 alignment (ASIL thinking, safety mechanisms) — overview
- Secure communications and secure flashing basics; hardening checklist
Course Day Structure
- Part 1: 09:00–10:30
- Break: 10:30–10:45
- Part 2: 10:45–12:15
- Lunch break: 12:15–13:15
- Part 3: 13:15–15:15
- Break: 15:15–15:30
- Part 4: 15:30–17:30