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[64];
void rs485_send(const uint8_t *frame, uint16_t len)
{
memcpy(tx_buf, frame, len);
gpio_write(DE_PIN, 1);
DMA1_Channel7->CCR &= ~1u;
DMA1_Channel7->CMAR = (uint32_t)(uintptr_t)tx_buf;
DMA1_Channel7->CNDTR = len;
DMA1_Channel7->CCR |= 1u;
}
void DMA1_Channel7_IRQHandler(void)
{
DMA1->IFCR = DMA_IFCR_CTCIF7;
gpio_write(DE_PIN, 0);
response_timer_start(MODBUS_TIMEOUT_MS);
}
void USART2_IRQHandler(void)
{
if (USART2->ISR & USART_ISR_RXNE) {
rx_push((uint8_t)USART2->RDR);
}
}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
Serial command parserProtocols · Warm-up · 3 bugs · ~4 minTLV provisioning parserProtocols · Hard · 4 bugs · ~7 minBuilding a framed packetProtocols · Medium · 3 bugs · ~6 minRS-485 Modbus RTU linkProtocols · Medium · 3 bugs · ~5 minBLE characteristic write handlerProtocols · Medium · 4 bugs · ~6 minWi-Fi reconnect handlerProtocols · Medium · 3 bugs · ~6 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs