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.
/* FreeRTOSConfig.h */
#define configCHECK_FOR_STACK_OVERFLOW 0
/* report.c */
static int depth_of(const char *s)
{
if (*s != '[') return 0;
return 1 + depth_of(s + 1);
}
void report_task(void *p)
{
char line[256];
for (;;) {
float t = read_temp();
snprintf(line, sizeof line, "T=%.2f C nest=%d", (double)t, depth_of(cmd_buf));
uart_puts(line);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
void app_init(void)
{
xTaskCreate(report_task, "report", 128, NULL, 2, NULL);
}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 minFreeRTOS sensor pipelineRTOS · Hard · 5 bugs · ~8 minSharing SPI between tasksRTOS · Medium · 3 bugs · ~6 minLogging through a queueRTOS · Warm-up · 3 bugs · ~4 minCritical sections and scheduler locksRTOS · Medium · 4 bugs · ~5 minPeriodic control loopRTOS · 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