Source: https://mokxi.com/learn/firmware-engineering-course
Updated: 2026-11-11

Embedded track
Firmware

# A firmware engineering course, hands-on

The skills firmware jobs ask for: registers, timers and interrupts by hand, C++ structured for testing, a debugger halt and protocols bit-banged from scratch.

Free In your browser 3 courses, 19 lessons, about 13 hours

Start free DDR, PORT and PIN See the course

Overview

## How you will learn it

Firmware engineers work closest to the chip, and interviews test exactly that: can you set up a timer from the datasheet, write a safe interrupt handler, structure code so it can be tested and find a fault with real tools.

This route pulls those skills from three courses, all on a simulated Uno so you can see every register change. More expert courses, on real-time timing, low power and firmware architecture, join this track as they are written.

Outcomes

## What you will learn

- Configure pins, timers and interrupts from the registers up.
- Write firmware as classes and state machines with logic you can test off target.
- Read a halt in the debugger and count cycles in assembly.
- Find hardware faults with a meter, a scope and a logic analyzer.

Your route

## The courses and lessons to take

Every lesson opens in the editor right away, signed in or not, and the simulator checks each step.

- Step 1 · 6 lessons · 5 h

### Under the hood

The registers under the Arduino functions.

- DDR, PORT and PIN The three registers behind every digital pin: count in binary on three lamps with one write to PORTB, turn on a pull-up through PORTD, and read a button straight out of PIND.
- Timers by hand Timer 1 set up register by register: a prescaler, CTC mode and OCR1A for a match every 500 ms, the compare flag polled and cleared by hand, and no millis() anywhere.
- The vector table and interrupts The 26 jumps at the start of flash, read out of the chip itself: a Timer 1 interrupt that blinks while loop() sleeps, an INT0 handler that counts presses, volatile, and reading shared data safely.
- Reading a halt in the debugger Ten readings of 30 that average 4: stop the Uno on a breakpoint, watch a variable climb, step one instruction and read the carry flag in SREG, then fix the bug the halt showed you.
- Bit-banging a protocol Draw UART frames by hand on a plain pin with counted delays, let the Mega's real USART receiver judge them, read them on the logic analyzer, and break the baud rate on purpose.
Every lesson in the course
- Step 2 · 7 lessons · 6 h

### C++ that scales

Firmware structure: buffers, state machines and testable logic.

- A ring buffer A fixed array that behaves like an endless queue: a head and a tail that wrap, overwrite the oldest when full, and a power-of-two capacity the compiler checks.
- A state machine class The elevator rebuilt as a Lift class: enum class states, one private go() that every transition passes through, and settings that belong to the constructor.
- Testable logic split from pins A Morse decoder cut in two: logic that takes plain numbers and never touches a pin, so setup() can test it, and a thin pin layer. Find a bug with a test, fix it, move the logic to its own file.
Every lesson in the course
- Step 3 · 6 lessons · 2 h

### Debug like an engineer

The bench tools.

The multimeter, the oscilloscope, the logic probe and analyzer, Serial done right, and a method that finds any fault. Ends with a boss: three bugs in one circuit.
Every lesson in the course

Keep going

## Guides and tools on the same subject

Guide

### Interrupts vs polling

Open it

Guide

### Arduino assembly language

Open it

Guide

### STM32 HAL and register code

Open it

Track

### Embedded track

Arduino, ESP32, Raspberry Pi Pico and STM32: pins, timing, buses, motors, WiFi, registers and debugging, every lesson checked on a simulated board.
See the whole track

Questions

## Questions people ask

What is the difference between firmware and software?

Firmware is software that runs on the device itself, usually with no operating system, talking straight to the hardware. The line is blurry, but firmware work means registers, timing and tight memory.

What should I know before this course?

Arduino basics and some C++. Embedded on the Arduino Uno and C++ on a board cover both.

Is this enough to get a firmware job?

It covers the core skills interviews ask about. Pair it with a project of your own that you can explain end to end.
