FRM-101 · Firmware & MCU
Bare-Metal C for Microcontrollers
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
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
Labs follow the academy model — 35% principles, 20% guided investigation, 45% engineering studio. Every claim you make in a lab is backed by a trace, a counter or a measurement you captured yourself. How we teach
- 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
This course uses lab hardware. In-person cohorts get boards on the desk; online cohorts get remote board access over SSH and JTAG.
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
How it runs
Every course follows the same model: 35% principles, 20% guided investigation, 45% engineering studio. You leave with working code, raw measurements and an evidence-based report — not a certificate of attendance. Read the methodology or see a full sample lesson.
Material is adapted to your kernel version, hardware and workload before a private delivery. For public cohorts, the environment is provided and configured.
Questions
Who is this course 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. It sits at foundation level within the Firmware & MCU track.
What do I need to know already?
Specific prerequisites for this course: Solid C, including pointers and bitwise operations; Basic digital electronics: clocks, reset, GPIO levels; No prior bare-metal or assembly experience required. We confirm levels before the cohort starts and adapt if a group is stronger or weaker than expected.
Can this run privately for my team?
Yes. Any course runs on-site at your offices anywhere, or live online for a distributed team, with labs adapted to your hardware and codebase.
What is the difference between in-person and online?
In person is 3 full days with hardware on your desk, capped at 14. Online is 6 half-day sessions across about two weeks so you can keep working, capped at 20, with remote lab access.
Do you invoice companies?
Yes. Purchase orders are accepted and invoicing is available in USD, EUR, GBP, SAR and CAD.
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 |
Dates shown for the next few months. If nothing fits, tell us where and when — cohorts are added on demand, and private delivery can be scheduled any week.
More in Firmware & MCU
FRM-1103 days
RTOS Fundamentals: Zephyr & FreeRTOS
Task scheduling, synchronisation and driver models in a small real-time operating system.
Practitioner-taught
SAR 7,880Next 11 Oct
FRM-1203 days
Bootloaders & Firmware Update
Updating firmware in the field without bricking devices, including signature verification and rollback.
Practitioner-taught
SAR 7,880Next 15 Nov
FRM-2013 days
I2C, SPI & CAN Protocol Firmware
Implementing and debugging the buses embedded systems communicate over, from the firmware side.
Practitioner-taught
SAR 7,880Next 22 Nov
FRM-2103 days
CMIS & Optical Module Firmware
Firmware for pluggable optical modules: the CMIS management interface and the state machines behind it.
Practitioner-taught
SAR 9,000Next 1 Nov