Embedded Level

Adaptive training for embedded engineers

Know your real level in embedded systems

Practice C, Cortex-M architecture, peripherals, interrupts, RTOS and more. Every question adapts to your skill, and every answer comes with a clear explanation.

Free while in beta. The placement test needs no account.

uart_rx.cWhere is the bug?
static uint8_t rx_done = 0;  /* line 1 */

void UART_IRQHandler(void) {
    rx_done = 1;
}

int main(void) {
    uart_start_receive();
    while (rx_done == 0) { }
    process_data();
}
Show the answer

Line 1. The flag is shared with an interrupt handler but is not declared volatile. The compiler may read it once, keep it in a register, and loop forever. The fix isstatic volatile uint8_t rx_doneso every read really goes to memory.

In the real app you also learn why each other line is fine, and your rating adjusts based on the question difficulty.

10
topics
1000
original questions
5
question types

Technologies covered

The tools and platforms a firmware engineer meets every day.

Embedded CThe language of firmware
ARM Cortex-MCore, NVIC, memory map
STM32Timers, clocks, peripherals
Nordic nRFLow-power wireless MCUs
ESP32Espressif devices
RTOSTasks, queues, mutexes
UART / SPI / I2CSerial communication
CAN busArbitration and framing
DMABuffers and streams
GNU toolchainobjdump, nm, size, maps
SWD / JTAGDebug and fault analysis
Low powerSleep modes and budgets

How it works

1

Answer questions

Start with a short session. Pick your platforms and rate yourself, or let the questions find your level.

2

Get an honest estimate

A rating system, similar to chess Elo, measures your level in each topic separately.

3

Improve efficiently

Difficulty adapts to you, weak topics get priority, and reviews return before you forget.

What you can practice

Ten topics covering the daily work of a firmware engineer. Your level is tracked separately in each one.

C for Embedded

Pointers, volatile, const placement, bit manipulation, unions and bitfields, integer promotion, static, and memory layout (.text/.data/.bss/stack/heap).

MCU Architecture

Cortex-M core, registers, memory map, clock tree, startup code, linker scripts, and the vector table.

Peripherals

GPIO, timers, PWM, input capture, ADC/DAC, RTC, and the watchdog.

Interrupts

NVIC, priorities, preemption, ISR design rules, race conditions, and atomicity.

Communication

UART, SPI, I2C, CAN, USB basics, framing, and error handling.

DMA

Channels, circular mode, cache coherency, and double buffering.

RTOS

Tasks, scheduling, priority inversion, mutex vs semaphore, queues, and stack sizing.

Power Management

Sleep modes, wake sources, and current budgeting.

Debugging & Tooling

SWD/JTAG, hard fault analysis, logic analysers, and binutils (objdump, nm, size).

Hardware Interface

Pull-ups, level shifting, decoupling, signal integrity basics, and reading datasheets and timing diagrams.

Questions cover general Cortex-M and C, with platform-specific ones for STM32, Nordic nRF and ESP32. You choose your platforms at the start.

Real engineering questions

No trivia. Every question tests something you actually use on the job, and every answer teaches you something.

Multiple choice

Four options, all plausible. Every wrong option comes with a reason why it is wrong.

Code reading

A short C snippet with syntax highlighting. You predict what it prints or what ends up in a register.

Find the bug

A small driver or interrupt handler with a real embedded bug. You click the faulty line.

Register calculation

Numeric answers with tolerance. Prescalers, baud rates, voltage dividers, current budgets.

Short answer

Free text, checked for the key concepts rather than exact wording.

Spaced repetition

Questions you struggled with come back right before you would forget them.

Find out where you stand

A few minutes of questions gives you an honest picture of your strengths and your gaps.

Take the placement test