Skip to the selected question
ASIC.FYI

ASIC Question Bank

1,000+ hardware interview questions
DescriptionQ289
Page ↗
Q289FWAppleASIC interview problem

Decode a compact hardware trace stream

TechniquesFWValidationDebugDecodeA
DifficultyMedium
TopicFirmware
LanguageC
Requirements4 checkpoints
01

Problem

Firmware receives a byte stream of typed trace records from a debug buffer and must reject damaged framing without publishing partial records. Implement the C trace decoder with a validate-then-decode pass.

Starting declarationC
struct TraceRec { uint8_t type; uint32_t value; };
enum TrDec { TD_OK, TD_BAD_ARG, TD_FORMAT, TD_NO_SPACE };
TrDec decode_trace(const uint8_t *in, size_t len, TraceRec *out,
size_t cap, size_t *count);

Example input and output

Use this case to check your interpretation
Input
bytes = {0x00, 0x7F, 0x40, 0x34, 0x12, 0xC0}, cap = 2.
Output
Return TD_OK with records {(0, 0x7F), (1, 0x1234)} and count = 2.
Explanation

The first header carries one byte, the second carries a two-byte little-endian value, and the final 0xC0 is a valid terminator.

02

Requirements (4)

  • Require count; in may be null only when len=0, and out may be null only when cap=0. Bad arguments return TD_BAD_ARG and preserve out and *count.
  • Legal headers are 0x00, 0x40, 0x80, and 0xC0. Their types are 0, 1, 2, and 3; types 0, 1, and 2 carry respectively 1, 2, and 4 little-endian payload bytes, while type 3 is the end marker and has no payload.
  • Validate the entire stream first: it must contain one end marker as its final byte, every payload must be complete, and no other header value is legal. TD_FORMAT preserves out and *count.
  • Let needed exclude the end marker. If needed>cap, set *count=needed, preserve out, and return TD_NO_SPACE; otherwise decode all records, set *count=needed, and return TD_OK.