The code
Embedded C for Cortex-M. It compiles. There are 3 real bugs in it: the kind that pass a bench test and fail in the field.
#define GPIOB_ODR (*(uint32_t *)0x48000414u)
void pulse_pin(void)
{
GPIOB_ODR |= (1u << 3);
GPIOB_ODR &= ~(1u << 3);
}
uint32_t * volatile adc_dr = (uint32_t *)&ADC1->DR;
uint16_t adc_sample(void)
{
return *adc_dr;
}
void short_delay(void)
{
for (int i = 0; i < 1000; i++) { }
}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.
STMicroelectronicsChipmaker · India hiring: MediumABBIndustrial · India hiring: MediumAMD IndiaChipmaker · India hiring: MediumAnalog DevicesChipmaker · India hiring: MediumAppleConsumer devices · India hiring: LowArmChipmaker · India hiring: MediumBoschAutomotive supplier · India hiring: HighDensoAutomotive supplier · India hiring: Medium
Related challenges
UART receive ring bufferDrivers & ISRs · Medium · 4 bugs · ~6 minCasting a byte stream to a structMemory & C · Medium · 4 bugs · ~6 minInteger promotion trapsMemory & C · Medium · 3 bugs · ~5 minStrings on the stackMemory & C · Warm-up · 3 bugs · ~4 minArray helpers with memcpyMemory & C · Warm-up · 3 bugs · ~4 minHeap use in a message handlerMemory & C · Medium · 3 bugs · ~5 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs