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.
uint8_t spi_xfer(uint8_t b)
{
while (!(SPI1->SR & SPI_SR_TXE)) { }
*(volatile uint8_t *)&SPI1->DR = b;
while (!(SPI1->SR & SPI_SR_RXNE)) { }
return *(volatile uint8_t *)&SPI1->DR;
}
void sensor_write(uint8_t reg, const uint8_t *d, int n)
{
CS_LOW();
SPI1->DR = reg;
for (int i = 0; i < n; i++) {
while (!(SPI1->SR & SPI_SR_TXE)) { }
SPI1->DR = d[i];
}
while (!(SPI1->SR & SPI_SR_TXE)) { }
CS_HIGH();
}
uint8_t sensor_read(uint8_t reg)
{
CS_LOW();
spi_xfer(reg | 0x80u);
uint8_t v = spi_xfer(0);
CS_HIGH();
return v;
}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.
ABBIndustrial · India hiring: MediumDysonConsumer devices · India hiring: LowEatonIndustrial · India hiring: HighInfineonChipmaker · India hiring: MediumInfosys Engineering ServicesEngineering services · India hiring: HighMicrochipChipmaker · India hiring: HighQuest GlobalEngineering services · India hiring: HighRenesasChipmaker · India hiring: Medium
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 minFlags shared with an ISRDrivers & ISRs · Medium · 2 bugs · ~5 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs