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 { uint8_t sensor; int32_t *result; } req_t;
QueueHandle_t req_q, reply_q;
bool sensor_get(uint8_t sensor, int32_t *out)
{
int32_t value;
req_t r = { sensor, &value };
xQueueSend(req_q, &r, portMAX_DELAY);
uint8_t done;
if (xQueueReceive(reply_q, &done, pdMS_TO_TICKS(100)) != pdTRUE)
return false;
*out = value;
return true;
}
void hub_task(void *p)
{
for (;;) {
req_t r;
xQueueReceive(req_q, &r, portMAX_DELAY);
*r.result = sensor_read_slow(r.sensor);
uint8_t done = 1;
xQueueSend(reply_q, &done, 0);
}
}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