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.
#define ALIVE_SENSOR (1u << 0)
#define ALIVE_COMMS (1u << 1)
#define ALIVE_UI (1u << 2)
#define ALIVE_ALL (ALIVE_SENSOR | ALIVE_COMMS | ALIVE_UI)
static volatile uint32_t alive;
void task_checkin(uint32_t bit)
{
alive |= bit;
}
void supervisor_task(void *p)
{
for (;;) {
vTaskDelay(pdMS_TO_TICKS(500));
if ((alive & ALIVE_ALL) == ALIVE_ALL) {
IWDG->KR = 0xAAAA;
}
alive = 0;
}
}
void USART3_IRQHandler(void)
{
comms_rx_byte((uint8_t)USART3->RDR);
task_checkin(ALIVE_COMMS);
}
void ui_task(void *p)
{
for (;;) {
ui_event_t e;
xQueueReceive(ui_q, &e, portMAX_DELAY);
task_checkin(ALIVE_UI);
ui_handle(&e);
}
}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 minNested mutexes under loadRTOS · Hard · 3 bugs · ~8 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs