FRM-101 · Firmware & MCU · Foundation
Bare-Metal C for Microcontrollers — full syllabus
Writing firmware with no operating system underneath: startup, linker scripts, peripherals and interrupts.
Who this course is for
Firmware engineers moving from application or RTOS-level code down to the metal, who need to own everything that runs before main() and debug it with a probe.
Prerequisites
- Solid C, including pointers and bitwise operations
- Basic digital electronics: clocks, reset, GPIO levels
- No prior bare-metal or assembly experience required
Course outline
Day 1 — From reset to main()
- The Cortex-M reset sequence: initial stack pointer and reset handler from the vector table
- Startup code: copying .data, zeroing .bss, setting the clock tree and the stack
- The linker script: memory regions, output sections and what KEEP() protects
- Reading the map file and disassembly to prove where things landed
- Flash, SRAM and peripheral space on the memory map; bit-banding and why it exists
Day 2 — Peripherals without a framework
- Memory-mapped I/O and what volatile actually guarantees
- Turning a datasheet register description into a C struct and access macros
- Configuring GPIO, a timer and a UART from the reference manual alone
- Compiler reordering and memory barriers around peripheral access
- Polling and busy-waiting: their real cost inside a superloop
Day 3 — Interrupts and the probe
- The NVIC: priority levels, preemption, nesting and tail-chaining
- Writing an interrupt handler: vector entries, clearing flags, shared-data rules
- Priority configuration and the bugs a wrong priority split hides
- SWD with OpenOCD and gdb: halt, step, breakpoints and data watchpoints
- Semihosting, ITM/SWO trace and when a plain UART wins
Hands-on labs
- Lab: bring up a Cortex-M board from erased flash with your own startup code and linker script — no vendor HAL — ending at a blinking LED
- Lab: configure a UART from the reference manual alone and validate the framing on the wire with a logic analyser
- Lab: place a function and a lookup table at explicit addresses through the linker script and verify the layout in the map file and over SWD
- Lab: write an interrupt-driven timer with nested NVIC priorities, then induce and diagnose a priority fault on the bench
- Lab: debug with OpenOCD and gdb: single-step the reset path and set a data watchpoint that catches a rogue write to shared state
Capstone project
Build a bare-metal sensor node on the lab board from zero: your own startup code and linker script, register-level drivers for a timer and one peripheral bus, and an interrupt-driven acquisition loop with a written timing budget. You deliver the source, the map file, a reset-to-main gdb trace and logic-analyser captures of the peripheral traffic — evidence the firmware does what you claim, not what a vendor HAL let you assume.
What you leave with
- Startup code and a linker script you can reproduce on any Cortex-M part
- Register-level peripheral programming from a reference manual, no framework required
- Working probe debugging with OpenOCD, gdb, watchpoints and ITM trace
- NVIC priority configuration and the interrupt bugs it prevents
Upcoming dates
| Dates | Where | Seats | Early bird | Regular | |
|---|---|---|---|---|---|
| 1 Nov – 3 Nov 20263 full days | RiyadhIn person · KAFD Conference Centre | 3 of 14 | — | SAR 6,750 | |
| 8 Nov – 10 Nov 20263 full days | Kuwait CityIn person · Al Hamra Tower | 8 of 14 | KWD 500until 9 Oct | ||
| 8 Nov – 10 Nov 20263 full days | MuscatIn person · Knowledge Oasis Muscat | 3 of 14 | OMR 620until 9 Oct | ||
| 15 Nov – 22 Nov 20266 half-days | Gulf bandLive online · 09:00–13:00 GMT+3 | 9 of 20 | US$1,170until 16 Oct | ||
| 16 Nov – 18 Nov 20263 full days | OttawaIn person · Kanata North Tech Park | 8 of 14 | CAD 2,200until 17 Oct | ||
| 16 Nov – 23 Nov 20266 half-days | Europe bandLive online · 09:00–13:00 CET | 14 of 20 | US$1,170until 17 Oct | ||
| 23 Nov – 25 Nov 20263 full days | TorontoIn person · MaRS Discovery District | 3 of 14 | CAD 2,200until 24 Oct | ||
| 23 Nov – 25 Nov 20263 full days | LondonIn person · Shoreditch Works | 8 of 14 | GBP 1,260until 24 Oct | ||
| 23 Nov – 30 Nov 20266 half-days | Americas bandLive online · 13:00–17:00 ET | 3 of 20 | US$1,170until 24 Oct | ||
| 30 Nov – 2 Dec 20263 full days | BerlinIn person · Factory Görlitzer Park | 3 of 14 | EUR 1,490until 31 Oct |
Book a seat, or bring this course to your team
Seats can be reserved online; private delivery runs on-site or live online, adapted to your stack.
Questions about fit or prerequisites? Email hello@kernelsystems.academy. To save this syllabus, print this page to PDF from your browser.