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.
SemaphoreHandle_t spi_mtx, log_mtx;
QueueHandle_t rec_q;
void log_write(const char *msg)
{
xSemaphoreTake(log_mtx, portMAX_DELAY);
log_append(msg);
if (log_full()) {
xSemaphoreTake(spi_mtx, portMAX_DELAY);
flush_log_to_flash();
xSemaphoreGive(spi_mtx);
}
xSemaphoreGive(log_mtx);
}
void storage_task(void *p) /* priority 1 */
{
for (;;) {
rec_t r;
xSemaphoreTake(spi_mtx, portMAX_DELAY);
xQueueReceive(rec_q, &r, portMAX_DELAY);
flash_write_record(&r);
log_write("record stored");
xSemaphoreGive(spi_mtx);
}
}
void control_task(void *p) /* priority 5, 1 ms period */
{
for (;;) {
run_control();
if (fault()) log_write("fault");
vTaskDelay(1);
}
}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.
MedtronicMedical devices · India hiring: MediumRenesasChipmaker · India hiring: MediumTata ElxsiEngineering services · India hiring: HighABBIndustrial · India hiring: MediumAcsia TechnologiesEngineering services · India hiring: MediumAppleConsumer devices · India hiring: LowAptivAutomotive supplier · India hiring: MediumAther EnergyEV OEM · India hiring: Medium
Related challenges
FreeRTOS 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 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