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 { uint32_t id; uint8_t ide; uint8_t dlc; uint8_t data[8]; } can_frame_t;
static uint8_t node_state[16][8];
void can_filter_init(void)
{
CAN1->FMR |= 1u; /* filter init mode */
CAN1->FS1R |= 1u; /* bank 0: 32-bit */
CAN1->FM1R &= ~1u; /* mask mode */
CAN1->sFilterRegister[0].FR1 = 0x100u << 21;
CAN1->sFilterRegister[0].FR2 = 0x00Fu << 21; /* low 4 bits: any node */
CAN1->FA1R |= 1u;
CAN1->FMR &= ~1u;
}
void CAN1_RX0_IRQHandler(void)
{
can_frame_t f;
can_read_fifo0(&f);
can_release_fifo0();
uint8_t node = f.id & 0x0F;
memcpy(node_state[node], f.data, f.dlc);
if (f.id == 0x100) {
apply_command(f.data);
}
}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.
ABBIndustrial · India hiring: MediumAptivAutomotive supplier · India hiring: MediumAther EnergyEV OEM · India hiring: MediumBoschAutomotive supplier · India hiring: HighCapgemini EngineeringEngineering services · India hiring: HighContinentalAutomotive supplier · India hiring: HighCyientEngineering services · India hiring: MediumDensoAutomotive supplier · India hiring: Medium
Related challenges
Serial command parserProtocols · Warm-up · 3 bugs · ~4 minTLV provisioning parserProtocols · Hard · 4 bugs · ~7 minBuilding a framed packetProtocols · Medium · 3 bugs · ~6 minRS-485 Modbus RTU linkProtocols · Medium · 3 bugs · ~5 minBLE characteristic write handlerProtocols · Medium · 4 bugs · ~6 minWi-Fi reconnect handlerProtocols · Medium · 3 bugs · ~6 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs