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.
static uint8_t rec[32];
static void put_u32(uint8_t *p, uint32_t v)
{
*(uint32_t *)p = v;
}
size_t pack_record(uint8_t type, uint32_t ts, uint64_t id, float val)
{
rec[0] = type;
put_u32(&rec[1], ts);
*(uint64_t *)&rec[5] = id;
*(float *)&rec[13] = val;
return 17;
}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: LowArmChipmaker · India hiring: MediumTeslaAutomotive OEM · India hiring: LowAMD IndiaChipmaker · India hiring: MediumAnalog DevicesChipmaker · India hiring: MediumAptivAutomotive supplier · India hiring: MediumBoschAutomotive supplier · India hiring: HighContinentalAutomotive supplier · India hiring: High
Related challenges
Casting a byte stream to a structMemory & C · Medium · 4 bugs · ~6 minInteger promotion trapsMemory & C · Medium · 3 bugs · ~5 minStrings on the stackMemory & C · Warm-up · 3 bugs · ~4 minArray helpers with memcpyMemory & C · Warm-up · 3 bugs · ~4 minHeap use in a message handlerMemory & C · Medium · 3 bugs · ~5 min64-bit microsecond timestampsTiming · Medium · 2 bugs · ~5 min
Flag the lines, say what breaks, then fix it and build it with clang in your browser.
Find the bugs