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.
typedef struct {
char text[48];
uint8_t level;
} log_msg_t;
QueueHandle_t log_q; /* item size: sizeof(log_msg_t *) */
void log_info(const char *s)
{
log_msg_t m;
strncpy(m.text, s, sizeof m.text);
m.level = 1;
log_msg_t *pm = &m;
xQueueSend(log_q, &pm, 0);
}
void log_task(void *p)
{
log_msg_t *pm;
for (;;) {
xQueueReceive(log_q, &pm, portMAX_DELAY);
uart_puts(pm->text);
}
}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: LowEspressifChipmaker · India hiring: MediumGarminConsumer devices · India hiring: LowMedtronicMedical devices · India hiring: MediumMeta Reality LabsConsumer devices · India hiring: LowNordic SemiconductorChipmaker · India hiring: LowQualcommChipmaker · India hiring: HighRenesasChipmaker · India hiring: Medium
Related challenges
FreeRTOS sensor pipelineRTOS · Hard · 5 bugs · ~8 minSharing SPI between tasksRTOS · Medium · 3 bugs · ~6 minCritical sections and scheduler locksRTOS · Medium · 4 bugs · ~5 minPeriodic control loopRTOS · Medium · 3 bugs · ~5 minNested mutexes under loadRTOS · Hard · 3 bugs · ~8 minTask check-in watchdogRTOS · 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