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.
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.
How it works
Answer questions
Start with a short session. Pick your platforms and rate yourself, or let the questions find your level.
Get an honest estimate
A rating system, similar to chess Elo, measures your level in each topic separately.
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