Embedded Systems Engineer question bank
100 questions. Filter by level and skill, track what you've solved, and see how many people get each one right.
- Why use volatile
- Setting a register bit
- Protocol with addresses
- Floating input pin
- Keeping ISRs short
- Dynamic memory on small MCUs
- PWM duty cycle
- What a watchdog does
- Reading a hex register value
- Clearing one register bit
- Toggling an LED pin
- Testing a status flag
- Adding to a uint8_t counter
- Where const goes in a pointer
- What lives in .bss
- A static local counter
- Converting an ADC reading
- UART bytes per second
- Why I2C needs pull-ups
- Talking to two SPI devices
- Timer prescaler maths
- Absolute maximum ratings
- Choosing scope or logic analyser
- Why a cross-compiler
- Keeping a table out of RAM
- First byte in memory
- Integer division results
- The interrupt vector table
- Sizing an LED resistor
- What a bootloader does
- A macro without parentheses
- Delaying inside an RTOS task
- CAN bus termination
- Why enable brown-out reset
- Priority inversion
- Buffering UART data
- I2C device not responding
- Counter shared with an ISR
- SPI returns garbage
- One press, many events
- Size of a struct
- Passing data between tasks
- Adding two uint8_t values
- Comparing int with unsigned
- Bit-fields for hardware registers
- sizeof on an array parameter
- Measuring a signal frequency
- Waking a task from an ISR
- C++ features often disabled
- Lighter than a semaphore
- Choosing task stack sizes
- Describing hardware in Zephyr
- Ring buffer index with a mask
- Slave holds SCL low
- Reading from an SPI slave
- UART framing errors
- Who wins CAN arbitration
- What filled the flash
- Dropping unused functions
- Initialised global reads garbage
- Stuck in Default_Handler
- Unit testing driver logic
- Unused pins and sleep current
- Clock speed and power
- Atomic GPIO writes
- Cortex-M interrupt priority numbers
- Multiplying Q15 numbers
- Feeding the watchdog with an RTOS
- Random HardFaults
- Corruption in one task
- DMA data looks stale
- Battery dies too fast
- Bricked devices after an update
- Reading a 32-bit field
- Missed motor control interrupts
- Works at -O0, fails at -O2
- An overflow check that vanishes
- Reading a float from a packet
- Packed struct crashes a Cortex-M0
- ISR runs twice per event
- A lock-free ISR ring buffer
- Rate monotonic utilisation test
- Taking a mutex in an ISR
- Garbled log text from two tasks
- A CAN node goes silent
- I2C bus stuck after reset
- A phantom 100 Hz signal
- Slow maths on a Cortex-M4F
- Jitter in a control loop ISR
- Proving the stack is big enough
- Downgrading to signed old firmware
- Firmware read over SWD
- Comparing a message authentication code
- FromISR call from a high priority ISR
- Flash wearing out in a week
- Settings lost on power cut
- Sleep current 60 times too high
- The tick keeps waking the CPU
- Timestamp jumps backwards
- Inverting a uint8_t