Domain
Embedded C
Not a "learn C" tutorial — this domain is the specific discipline of reasoning about C the way it actually behaves on a microcontroller with a few kilobytes of RAM, no operating system to catch a mistake, and a CPU that will happily execute undefined behavior instead of complaining about it. Every topic here exists because it's a place embedded C diverges from "C as taught in a general programming course" in a way that produces real, field-reported bugs. If C itself is still new to you, start with the C domain first — this one assumes you're already comfortable with variables, control flow, functions, and pointers.
Embedded is the microcontroller itself — cores, pins, interrupts, timers. C is the language taught from first principles, with nothing assumed. This domain is neither: it's the language running on that microcontroller, specifically where it diverges from general-purpose C — storage classes, integer representation, the compile/link pipeline, memory management, and the data structures a program is built out of, all reasoned about under bare-metal constraints. The distinction matters because everything here applies whether the target is an 8-bit AVR, a 32-bit Cortex-M, or a full Linux SBC — it's C discipline, not hardware.
Topics
- Storage Classes & Scope — global, static, local, extern, registerwritten
- Data Types & Integer Overflow — int vs. uint, stdint.h, rolloverwritten
- Compilation & Linking — preprocessor to linker, startup code, .map fileswritten
- Dynamic Memory — malloc, calloc, realloc, free, and why embedded avoids themwritten
- Pointers — arithmetic, array decay, function pointers, common bugswritten
- Registers & volatile — memory-mapped I/O and bit manipulationwritten
- Arrays & Strings — memory layout, decay, and the missing-NUL bugwritten
- Linked Lists — singly, doubly, and circularwritten
- Stacks, Queues & Ring Buffers — the ISR-to-main-loop patternwritten
- Structs, Unions & Bit-Fields — register maps, packed structs, and bit-fieldswritten
- Alignment & Padding — why a struct's size is often larger than its fieldswritten
- const Correctness — a compiler-enforced promise, and why const data can live in flashwritten
Nothing left in "Planned" — this domain now covers the full arc from language fundamentals under bare-metal constraints through to memory layout at the byte level.