Reference9 min read
Resources
This is the only page on the site with external links. Everything here is either an official source or a long-established project or community. Where a document lives behind a vendor’s product page, the link goes to that page and the note tells you which document to download.
Arm architecture and Cortex-M
Section titled “Arm architecture and Cortex-M”- Arm Developer documentation: The entry point for every Arm manual. Search by document number when you know it.
- ARMv7-M Architecture Reference Manual (DDI 0403): The definitive specification of the architecture behind Cortex-M3, M4, and M7: instruction set, exception model, system registers. Dense, but it is the final word.
- Cortex-M4 Devices Generic User Guide (DUI 0553): The readable version: core registers, NVIC, SCB, SysTick, MPU, and every instruction, written for programmers. Read this before the architecture manual.
- Cortex-M4 Technical Reference Manual (100166): Implementation details such as instruction cycle counts and interrupt latency.
- Arm ABI documents on GitHub: The AAPCS calling convention and the ELF for Arm specification. Read the AAPCS once to understand what every function prologue is doing.
- CMSIS 6 on GitHub: Arm’s core headers (
core_cm4.h) and documentation. Reading the source ofNVIC_EnableIRQand__set_PRIMASKdemystifies them. - Arm GNU Toolchain downloads: Official prebuilt
arm-none-eabitoolchains for Windows, macOS, and Linux, with release notes.
STMicroelectronics and the STM32F407
Section titled “STMicroelectronics and the STM32F407”- STM32F407VG product page: The Documentation tab has the four documents you need: the datasheet, reference manual RM0090, programming manual PM0214 (the Cortex-M4 as ST implements it), and the errata sheet ES0182. The CAD Resources or tools section links the SVD file.
- STM32F4 Discovery board page: The board user manual and schematics. The schematic tells you which pins are already wired to the LEDs, accelerometer, audio DAC, and USB.
- STSW-LINK009 ST-Link USB driver: The Windows driver for the ST-Link probe on the Discovery board.
- STM32CubeProgrammer: ST’s flashing and option-byte tool. Useful for inspecting and resetting read protection and option bytes.
- cmsis_device_f4 on GitHub: ST’s official register headers (
stm32f407xx.h) for the STM32F4. Compare them with the header you write in Memory-Mapped Registers in C. - STM32CubeF4 on GitHub: ST’s HAL, LL drivers, and examples. Worth reading to see how a vendor library is structured, and to borrow working configuration sequences.
C language
Section titled “C language”- C11 committee draft N1570: Effectively the C11 standard. When you need to know whether something is undefined behaviour, look it up here (Annex J lists them all).
- ISO C working group WG14: Papers and drafts for newer standards, including C23.
- cppreference C section: The fastest accurate reference for every library function, keyword, and the standard each feature arrived in.
- SEI CERT C Coding Standard: Rules with compliant and non-compliant examples for integer overflow, buffer handling, and more. Free.
- MISRA: Publisher of the MISRA C guidelines used in automotive, medical, and industrial firmware.
- Modern C by Jens Gustedt: A rigorous, current book on C, freely downloadable from the author.
GNU toolchain documentation
Section titled “GNU toolchain documentation”- GCC online documentation: Every option, attribute, and builtin. The “ARM Options” and “Function Attributes” pages are the ones firmware engineers use most.
- GNU binutils documentation: Manuals for
as,objdump,objcopy,nm,readelf, andaddr2line. - GNU ld manual: The reference for linker scripts:
MEMORY,SECTIONS,AT>,KEEP,ASSERT. Read the “Linker Scripts” chapter end to end once. - GDB documentation: The full gdb manual, including remote debugging and the Python API.
- GNU make manual: Pattern rules, automatic variables, and functions.
- Newlib: The C library in the Arm toolchain, including the system call interface you retarget.
- Picolibc on GitHub: A modern, smaller C library for embedded systems, an alternative to newlib.
RTOS and middleware
Section titled “RTOS and middleware”- FreeRTOS: Official site with the kernel documentation, API reference, and the free book “Mastering the FreeRTOS Real Time Kernel”.
- FreeRTOS-Kernel on GitHub: The kernel source.
portable/GCC/ARM_CM4F/port.ccontains a production context switch worth reading line by line. - Zephyr Project documentation: Device tree, Kconfig, drivers, and the west build tool. The best documented open-source RTOS.
- MCUboot documentation: Design of a secure bootloader: image format, slots, swap strategies, signing.
- MCUboot on GitHub: Source and the
imgtoolsigning script. - TinyUSB documentation: A portable USB device and host stack for microcontrollers, with CDC, HID, MSC, and DFU classes.
- TinyUSB on GitHub: Source and examples, including STM32F4 board support.
- LittleFS on GitHub: A power-loss resilient flash filesystem. Its
DESIGN.mdis an excellent explanation of flash-aware data structures. - FatFs: The standard small FAT filesystem module for SD cards and USB drives.
- lwIP: The lightweight TCP/IP stack used in most MCU networking products.
- Mbed TLS on GitHub: TLS and cryptography library sized for microcontrollers.
- nanopb on GitHub: Protocol Buffers for C with static allocation.
- Quantum Leaps: The QP frameworks for hierarchical state machines and active objects, with extensive free articles.
Simulators, debuggers, and tools
Section titled “Simulators, debuggers, and tools”- Renode: Antmicro’s full-system simulator. Models the STM32F4 Discovery used in this course.
- Renode documentation: Monitor commands, platform descriptions, and Robot Framework testing.
- Renode on GitHub: Source and the Releases page with installers for Windows, macOS, and Linux.
- QEMU Arm system emulator documentation: The list of emulated Arm boards, including the STM32-based
netduinoplus2. - OpenOCD: Home of the Open On-Chip Debugger, with the user guide and release downloads.
- pyOCD: A Python-based alternative to OpenOCD for CMSIS-DAP and other probes, easy to script.
- Cortex-Debug on GitHub: The VS Code extension used in this course; its wiki documents every
launch.jsonoption. - Visual Studio Code: The editor used in this course.
- Compiler Explorer: See the assembly for any C snippet, for any compiler and flags, instantly.
- MSYS2: Unix-like environment and package manager for Windows; the easiest way to get a host GCC there.
- Homebrew: The macOS package manager used in Setting Up Your Toolchain.
- Chocolatey: An alternative Windows package manager.
- sigrok and PulseView: Open-source logic analyzer software that decodes UART, SPI, I2C, CAN, and more with cheap USB analyzers.
- Cppcheck: Free static analyser for C, with a MISRA addon.
- clang-tidy: Clang-based linter with checks for bugprone patterns and CERT rules.
- Unity test framework on GitHub: Small C unit test framework used in this course.
- CMock on GitHub: Generates mocks from C headers to pair with Unity.
Open-source code worth reading
Section titled “Open-source code worth reading”- libopencm3 on GitHub: A clean, open-source register-level library for many Cortex-M families. Good for comparing your drivers with an independent implementation.
- FreeRTOS-Kernel: Read
tasks.c,queue.c, and the Cortex-M4F port to see how a real RTOS is built. - Zephyr on GitHub: Production driver code for hundreds of boards, with device tree and Kconfig at scale.
- MCUboot: A security-reviewed bootloader; read the swap and image validation code after Bootloaders and Firmware Update.
- TinyUSB: A portable stack with a clear split between class drivers and hardware ports.
- LittleFS: Compact, heavily commented, and built around power-fail safety.
Embedded Linux (for the boundary lesson)
Section titled “Embedded Linux (for the boundary lesson)”- Bootlin training materials: Free slides and labs for embedded Linux, kernel drivers, Yocto, and Buildroot.
- Yocto Project: The industry-standard build system for custom embedded Linux distributions.
- Buildroot: A simpler alternative for building small embedded Linux systems.
These are the books referenced in What Comes Next. Look them up by title and author; editions change.
| Book | Author(s) | Why |
|---|---|---|
| The C Programming Language, 2nd ed. | Kernighan and Ritchie | Short, precise, and still the best model of clear C writing |
| C Programming: A Modern Approach, 2nd ed. | K. N. King | The most thorough textbook for learning C properly, with exercises |
| Modern C | Jens Gustedt | Rigorous and up to date with C17 and C23 (free, linked above) |
| Expert C Programming: Deep C Secrets | Peter van der Linden | Declarations, linking, and the corners of C, told with war stories |
| Effective C | Robert C. Seacord | Modern, security-focused C from a CERT C author |
| The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors | Joseph Yiu | The book on Cortex-M internals: exceptions, NVIC, MPU, low power |
| Making Embedded Systems | Elecia White | Practical firmware design and engineering judgement |
| Embedded Systems Architecture | Daniele Lacamera | Bare-metal Cortex-M from boot to networking and security |
| Real-Time Concepts for Embedded Systems | Qing Li and Caroline Yao | RTOS objects and design patterns explained clearly |
| Practical UML Statecharts in C/C++ | Miro Samek | Hierarchical state machines and active objects for embedded systems |
| Hacker’s Delight | Henry S. Warren | Bit manipulation tricks with proofs |
| Computer Systems: A Programmer’s Perspective | Bryant and O’Hallaron | How programs map to machines: representation, assembly, linking, memory (book site) |
Communities, blogs, and podcasts
Section titled “Communities, blogs, and podcasts”- Interrupt by Memfault: Deep, practical articles on Cortex-M faults, linker scripts, debugging, and firmware tooling. Some of the best free firmware writing anywhere.
- Embedded Artistry: Articles and resources on embedded architecture, testing, and process.
- Embedded.fm: A long-running podcast about embedded systems engineering, hosted by Elecia and Christopher White.
- Jack Ganssle: Decades of articles on firmware engineering practice and his newsletter, The Embedded Muse.
- r/embedded: An active community for questions, career advice, and project feedback.
- EEVblog forum: Electronics-heavy community; the place to ask when the problem might be the hardware.
Adjacent skills
Section titled “Adjacent skills”- The Embedded Rust Book: How Rust is used on Cortex-M. Worth knowing about even if you work in C.
- Pro Git: The free official Git book. Firmware teams live and die by version control discipline.