Field Guide · concept

Bare-metal programming means writing software that runs directly on the hardware with no operating system underneath it.1

read do work update out super loop (forever) boot interrupt handler, then return
Bare-metal firmware is a "super loop": after boot the processor circles forever — read inputs, do work, update outputs. Time-critical events don't wait their turn; a hardware interrupt briefly diverts the core to a short handler and then hands control back to the loop. No scheduler, no OS — just your code and the silicon.

Overview

On a microcontroller, bare-metal code is the firmware itself: it configures the chip’s peripheral registers by hand, manages its own memory, and typically runs as a “super loop” — an endless main loop that does work, with interrupts handling time-critical events. There is no scheduler, no driver model, and no abstraction between your code and the silicon, which means total control and minimal overhead, but also total responsibility for timing and correctness.

The two structural tools are polling — the loop repeatedly checking a flag or input — and interrupts, which let hardware pull the processor aside the instant something needs attention. Getting the balance right between them is much of the craft of bare-metal work.

Bare metal versus an RTOS

The same chip can run either way; the choice is about how many concurrent jobs the firmware must juggle:

Aspect Bare metal With an RTOS
Structure One super loop + interrupts Multiple scheduled tasks
Overhead Essentially none A few KB of code and RAM
Concurrency Hand-managed Scheduler handles it
Boot time Instant Near-instant
Best for Simple, tiny, timing-critical Many competing deadlines

Where it fits

Bare metal is the right choice for the simplest, smallest, or most timing-sensitive embedded systems, where an OS would only add size and unpredictability. It boots instantly and wastes no resources. The cost shows up as a project grows: juggling many concurrent jobs by hand becomes error-prone, which is the point at which developers adopt a real-time operating system. New firmware is loaded by in-system programming or a bootloader. The small radios and sensors whose signals GopherTrunk decodes are very often bare-metal devices — a single loop is all their one job requires.

Sources

  1. Bare machine — Wikipedia, on running software directly on hardware. 

See also