FRM-101 · Firmware & MCU

Bare-Metal C for Microcontrollers

Writing firmware with no operating system underneath: startup, linker scripts, peripherals and interrupts.

Foundation 3 days in person6 half-days online Max 14 in person

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 operationsBasic digital electronics: clocks, reset, GPIO levelsNo 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

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

  1. 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
  2. Lab: configure a UART from the reference manual alone and validate the framing on the wire with a logic analyser
  3. 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
  4. Lab: write an interrupt-driven timer with nested NVIC priorities, then induce and diagnose a priority fault on the bench
  5. 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

DatesWhereSeatsEarly birdRegular
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 OctKWD 560
8 Nov – 10 Nov 20263 full days MuscatIn person · Knowledge Oasis Muscat 3 of 14 OMR 620until 9 OctOMR 690
15 Nov – 22 Nov 20266 half-days Gulf bandLive online · 09:00–13:00 GMT+3 9 of 20 US$1,170until 16 OctUS$1,300
16 Nov – 18 Nov 20263 full days OttawaIn person · Kanata North Tech Park 8 of 14 CAD 2,200until 17 OctCAD 2,450
16 Nov – 23 Nov 20266 half-days Europe bandLive online · 09:00–13:00 CET 14 of 20 US$1,170until 17 OctUS$1,300
23 Nov – 25 Nov 20263 full days TorontoIn person · MaRS Discovery District 3 of 14 CAD 2,200until 24 OctCAD 2,450
23 Nov – 25 Nov 20263 full days LondonIn person · Shoreditch Works 8 of 14 GBP 1,260until 24 OctGBP 1,400
23 Nov – 30 Nov 20266 half-days Americas bandLive online · 13:00–17:00 ET 3 of 20 US$1,170until 24 OctUS$1,300
30 Nov – 2 Dec 20263 full days BerlinIn person · Factory Görlitzer Park 3 of 14 EUR 1,490until 31 OctEUR 1,660

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