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.
static uint8_t tx_buf[12];
static uint8_t rx_buf[12];
static uint32_t frames_ok;
void spi_xfer(const uint8_t *cmd, size_t n)
{
memcpy(tx_buf, cmd, n);
spi_dma_start(tx_buf, rx_buf, n);
}
void spi_dma_rx_done(void)
{
SCB_InvalidateDCache_by_Addr(rx_buf, sizeof rx_buf);
if (rx_buf[0] == 0xA5) frames_ok++;
handle_reply(rx_buf);
}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.
AMD IndiaChipmaker · India hiring: MediumAnalog DevicesChipmaker · India hiring: MediumHCLTech ER&DEngineering services · India hiring: HighIntel IndiaChipmaker · India hiring: HighMistral SolutionsEngineering services · India hiring: MediumQualcommChipmaker · India hiring: HighTexas InstrumentsChipmaker · India hiring: HighABBIndustrial · India hiring: Medium
Related challenges
ADC with circular DMADMA & graphics · Hard · 3 bugs · ~7 minLogging over UART with DMADMA & graphics · Medium · 3 bugs · ~5 minLTDC double bufferingDMA & graphics · Hard · 3 bugs · ~7 minLVGL flush callback with DMA2DDMA & graphics · Medium · 3 bugs · ~5 minTouch controller interruptDMA & graphics · Medium · 4 bugs · ~6 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs