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.
const char *ip_to_str(uint32_t ip)
{
static char buf[16];
sprintf(buf, "%u.%u.%u.%u", (unsigned)(ip >> 24), (unsigned)(ip >> 16) & 0xFFu,
(unsigned)(ip >> 8) & 0xFFu, (unsigned)ip & 0xFFu);
return buf;
}
int parse_args(char *line, char *argv[], int max)
{
int n = 0;
char *tok = strtok(line, " ");
while (tok && n < max) {
argv[n++] = tok;
tok = strtok(NULL, " ");
}
return n;
}
void log_peer(uint32_t local, uint32_t remote)
{
log_line("link %s -> %s", ip_to_str(local), ip_to_str(remote));
}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.
AppleConsumer devices · India hiring: LowGarminConsumer devices · India hiring: LowMedtronicMedical devices · India hiring: MediumArmChipmaker · India hiring: MediumBoschAutomotive supplier · India hiring: HighDensoAutomotive supplier · India hiring: MediumEspressifChipmaker · India hiring: MediumMeta Reality LabsConsumer devices · India hiring: Low
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