
This course contains the use of artificial intelligence.
(Used only for minor visual assistance such as slide layout. All instruction, code, and narration are created by the instructor.)
Course Description
Most embedded systems start simple, but quickly become harder to test, harder to scale, and harder to maintain.
This course focuses on solving that by building reusable embedded C modules and validating them using host-based unit testing.
What this course is about
You’ll build a set of practical embedded components and see how they fit together in a clean, event-driven system.
The focus is on:
Reusable design
Predictable behavior
Proper verification
All testing is done on the host using Unity and Ceedling, so you can validate firmware logic without hardware.
What you’ll build
Throughout the course, you’ll work with core embedded building blocks, including:
Bit and register field helpers
Ring buffer (deterministic, stream-safe)
Fixed-size queue (no dynamic allocation)
Event dispatcher (ID to handler routing)
Table-driven finite state machine
Integrated event-driven mini system
Each module is:
Statically allocated
Deterministic
Tested with edge cases
Designed for reuse
Testing approach
Every component is verified with unit tests on the host.
This includes:
Validating normal behavior
Handling edge cases
Testing failure conditions
Verifying integration between components
You’ll also see use-case style tests and system-level flows, so it’s clear how each piece behaves in a working application.
How this course is different
This is not a “type along” coding course.
The focus is on:
Understanding real implementations
Testing behavior properly
Seeing how components interact in a system
The goal is not just to write code, but to build components you can reuse and trust.
Why host-based testing matters
Most embedded logic does not require hardware to verify.
By testing on your PC, you can:
Iterate faster
Catch edge cases early
Improve code quality before deployment
This workflow is widely used in professional embedded development and is often missing from traditional courses.
What you’ll walk away with
By the end of this course, you’ll be able to:
Design reusable embedded C modules with clean APIs
Structure firmware using event-driven patterns
Write and run unit tests using Unity and Ceedling
Validate behavior, including edge cases, on the host
Integrate components into a complete working system