The code
Embedded C for Cortex-M. It compiles. There are 2 real bugs in it: the kind that pass a bench test and fail in the field.
typedef struct {
uint8_t rx_ready : 1;
uint8_t tx_busy : 1;
uint8_t error : 1;
} uart_flags_t;
static volatile uart_flags_t flags;
static volatile uint32_t pending;
void USART1_IRQHandler(void)
{
if (USART1->ISR & USART_ISR_RXNE) {
rx_push(USART1->RDR);
flags.rx_ready = 1;
pending++;
}
}
void main_loop(void)
{
flags.tx_busy = 1;
start_tx();
if (pending) {
handle_one();
pending--;
}
}What an interviewer expects
- Point to each line you'd stop in a code review.
- Say what actually breaks: the failure mode, not just the rule it violates.
- Fix it, then defend the fix when asked the follow-up.
The bugs, reference fixes and the follow-up question are in the practice app, after you've tried it.
Companies that test this
Matched on the skills each company's embedded roles emphasise.
AppleConsumer devices · India hiring: LowGarminConsumer devices · India hiring: LowMedtronicMedical devices · India hiring: MediumArmChipmaker · India hiring: MediumBoschAutomotive supplier · India hiring: HighDensoAutomotive supplier · India hiring: MediumEspressifChipmaker · India hiring: MediumMeta Reality LabsConsumer devices · India hiring: Low
Related challenges
UART receive ring bufferDrivers & ISRs · Medium · 4 bugs · ~6 minSPI NOR flash driverDrivers & ISRs · Medium · 4 bugs · ~6 minSTM32 HAL I2C readDrivers & ISRs · Warm-up · 4 bugs · ~4 minButton debounce in an EXTI ISRDrivers & ISRs · Warm-up · 3 bugs · ~4 minIndependent watchdog usageDrivers & ISRs · Medium · 3 bugs · ~5 minSynchronous request and replyRTOS · Hard · 3 bugs · ~8 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs