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.
uint16_t crc16_ccitt(const uint8_t *d, size_t n)
{
uint16_t crc = 0xFFFF;
for (size_t i = 0; i < n; i++) {
crc ^= (uint16_t)d[i] << 8;
for (int b = 0; b < 8; b++)
crc = (crc & 0x8000) ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc;
}
void send_packet(uint8_t cmd, const uint8_t *p, uint8_t n)
{
uint8_t frame[64];
frame[0] = SOF;
frame[1] = cmd;
frame[2] = n;
memcpy(&frame[3], p, n);
uint16_t crc = crc16_ccitt(frame, n + 3);
memcpy(&frame[3 + n], &crc, 2);
uart_send(frame, n + 5);
}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: MediumAptivAutomotive supplier · India hiring: MediumAther EnergyEV OEM · India hiring: MediumBoschAutomotive supplier · India hiring: HighCapgemini EngineeringEngineering services · India hiring: HighContinentalAutomotive supplier · India hiring: HighCyientEngineering services · India hiring: MediumDensoAutomotive supplier · India hiring: Medium
Related challenges
Serial command parserProtocols · Warm-up · 3 bugs · ~4 minTLV provisioning parserProtocols · Hard · 4 bugs · ~7 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 minCAN receive filter and handlerProtocols · Medium · 3 bugs · ~7 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs