Skip to main content

How This Section Is Organised

Sixteen folders is a lot to land on with no map. The organising idea behind this section is that embedded engineering isn't one linear skill you learn top to bottom โ€” it's several tracks (hardware, the toolchain, bare-metal fundamentals, concurrency, connectivity, safety, and so on) that a real project touches in a different order depending on what you're actually trying to do. A folder map tells you where a topic lives; a learning path tells you a sane order to read folders in for a specific goal. This page gives you both, plus the one policy that explains why some pages here link out to computer-science/ instead of repeating material you might expect to find locally.

The folder mapโ€‹

Numeric prefixes (00, 01, 02...) exist only to order folders on disk โ€” the label you see in the sidebar comes from each folder's _category_.json, not the number. Reading the prefix as "difficulty level" or "required order" is the wrong way to use it; use the learning paths below instead.

FolderQuestion it answers
๐Ÿ“– 00-overviewWhat does "embedded" mean, and what are the words everyone assumes you already know?
๐Ÿ”ง 01-hardware-foundationsWhat hardware do I choose, and what does a datasheet or schematic actually tell me?
๐Ÿง  02-processor-architectureHow does a Cortex-M core actually work โ€” registers, memory map, pipeline?
๐Ÿ› ๏ธ 03-toolchain-and-buildHow does source code become a flashable image on this target?
โšก 04-bare-metal-programmingWhat runs before main(), and how do I write register-level code without an OS?
๐Ÿ”Œ 05-peripherals-and-driversHow do I talk to GPIO, UART/SPI/I2C, DMA, and external memory correctly?
โฑ๏ธ 06-interrupts-timing-and-real-timeHow do interrupts and the NVIC work, and what actually breaks timing determinism?
๐Ÿงต 07-rtosHow do tasks, scheduling, and synchronization work โ€” in FreeRTOS and in Zephyr?
๐Ÿ“ก 08-connectivity-and-protocolsHow do I get USB, Ethernet/TCP-IP, or wireless working on constrained hardware?
๐Ÿ”‹ 09-low-power-designHow do I make a battery-powered design actually last?
๐Ÿง 10-embedded-linuxWhen is Linux the right call, and how does the boot chain and driver model work?
๐Ÿž 11-debugging-and-testingHow do I debug a hardfault, and how do I test firmware at all?
๐Ÿ›ก๏ธ 12-safety-and-reliabilityWhat do IEC 61508, ISO 26262, DO-178C, and IEC 62304 actually require of me?
๐Ÿ”’ 13-securityHow do I secure boot, storage, and communication on a constrained device?
โ™ป๏ธ 14-firmware-lifecycleHow do I version, update, and support firmware after it ships?
๐Ÿงฉ 15-languages-and-practiceHow do I structure firmware well, and what do Rust and MicroPython change?

Four learning pathsโ€‹

These are reading orders through the folders above by name, not literal links yet โ€” most of the target pages don't exist until later tasks in this build finish, at which point the section's navigation gets wired up so you can click straight through.

Day one โ€” you have no embedded background and want to see something work before you study why it worked. 00-overview (this folder) โ†’ 01-hardware-foundations (what to buy) โ†’ 04-bare-metal-programming (your first bare-metal blink) โ†’ then back to 02-processor-architecture and 03-toolchain-and-build to understand why it worked. This path deliberately defers the toolchain and architecture theory until after a first success, because motivation matters more than sequencing when you're starting from zero.

I have a board and nothing works โ€” a troubleshooting path, not a syllabus. 01-hardware-foundations (is it even powered correctly) โ†’ 03-toolchain-and-build (is the image actually getting onto the chip) โ†’ 04-bare-metal-programming (is the startup code doing what you think) โ†’ 11-debugging-and-testing (systematic hardfault and JTAG/SWD debugging once the basics check out).

I'm building a product โ€” the path from a working prototype to something shippable. 04-bare-metal-programming โ†’ 05-peripherals-and-drivers โ†’ 07-rtos โ†’ 09-low-power-design โ†’ 14-firmware-lifecycle. This is roughly the order real product timelines hit these concerns: get something running, add the drivers a real product needs, add concurrency once the driver count makes a main loop unwieldy, then power and lifecycle once the product itself is close to done.

I'm moving to Linux โ€” for engineers whose target has (or will have) an MMU-capable microprocessor or SoC. 02-processor-architecture (what's different about an applications core) โ†’ 10-embedded-linux (boot chain, drivers, build systems) โ†’ 11-debugging-and-testing (debugging looks different again once there's an OS in the way).

This section does not re-teach material that already has a good home elsewhere on this site. General bus protocol theory (I2C, SPI, UART framing), general interrupt handling, scheduling theory, CPU architecture fundamentals, and bit manipulation all live under computer-science/, and embedded pages link out to that material instead of restating it. What embedded pages add on top is the part that's genuinely specific to this domain: register-level detail, Cortex-M-specific behavior, and the real-time and resource constraints from What "Embedded" Actually Means that general computer-science treatments don't need to worry about.

Concretely: a page here explaining I2C at the register level assumes you already know what I2C is โ€” the wire protocol, addressing, clock stretching โ€” because Serial Buses: I2C, SPI, UART already covers that well, and duplicating it here would mean two pages to keep in sync every time either one is corrected. The same logic applies to Scheduling for RTOS scheduling theory and to Instruction Set Architecture for what an ISA is before a page here gets into Cortex-M's specific instruction subset. If a link in this section takes you outside docs/embedded/, that's this policy working as intended, not a sign the section is incomplete.

warning

Don't skip the cross-referenced computer-science/ page assuming "I'll pick it up from context." Embedded pages are written assuming you've already read the linked prerequisite โ€” a page on I2C register configuration will use terms like "clock stretching" or "multi-master arbitration" without re-explaining them, because that explanation lives one click away. Reading the embedded-specific page first, without the foundation, is a common way to come away with a plausible-sounding but wrong mental model of what a register field is actually doing โ€” and that wrong model is expensive to unlearn once you've built code around it.

See alsoโ€‹

  • What "Embedded" Actually Means โ€” the constraint set every later folder assumes you understand.
  • Bare-Metal, RTOS, or Linux โ€” the decision that determines which of the "I'm building a product" or "I'm moving to Linux" paths above actually applies to you.
  • Glossary โ€” terms used across every folder in this map, defined once here.
  • Embedded Systems โ€” the full section index this page's folder map summarizes and expands on.

Referencesโ€‹

  • Docusaurus โ€” Sidebar documentation โ€” the mechanism behind the folder map above: sidebars here are autogenerated from folder structure, not hand-edited navigation.
  • Write the Docs โ€” Documentation guide โ€” community guidance on organizing reference material into task-based reading paths, the model the four learning paths above follow.