Embedded Engineer interview questions
100 real questions with model answers and explanations for Embedded Engineer candidates.
See a Embedded Engineer resume example →Practice with flashcards
Spaced repetition · Hunter Pass
Questions
I would separate the three timing domains and keep hardware ownership explicit.
- A 1 ms acquisition task would wake from a timer or DMA notification, timestamp samples, and enqueue fixed-size records without doing CAN work.
- A 10 ms publisher task would own CAN transmission, while a 100 ms diagnostics task would run below both time-critical tasks.
- I would pass data through bounded queues and give each peripheral one owner, avoiding shared-driver locks in the 1 ms path.
- I would size each stack from measured high-water marks under worst-case load, then leave at least 25% headroom within the 128 KB budget.
Why interviewers ask this: The interviewer is checking whether the candidate can turn timing and memory constraints into clear FreeRTOS task boundaries rather than creating one task per function blindly.
I would assign fixed priorities by deadline, with the 2 ms control task highest.
- FreeRTOS runs the ready task with the higher numeric task-priority value, so I might use control 4, telemetry 3, and logging 1.
- I would keep interrupt-deferred work that can unblock control at an appropriate priority without placing routine logging above telemetry.
- Each task would block on a delay, queue, or notification when idle so a lower-priority task can run.
- I would verify response times with measured worst-case execution and blocking, because priority numbers alone do not prove the 2 ms deadline.
Why interviewers ask this: The interviewer is evaluating correct FreeRTOS priority semantics and whether the assignment follows timing requirements instead of perceived business importance.
I would use vTaskDelayUntil so releases stay anchored to the original 10 ms schedule.
- Initialize a TickType_t lastWake with xTaskGetTickCount before the loop, then call vTaskDelayUntil with pdMS_TO_TICKS(10) on each iteration.
- Unlike vTaskDelay, this avoids accumulating the variable 1 ms to 3 ms execution time into the next release.
- I would timestamp each start and flag an overrun if the previous iteration reaches or passes its next release.
- The tick rate must represent 10 ms exactly enough for the requirement; tighter phase accuracy should use a hardware timer notification.
Why interviewers ask this: The interviewer wants to see that the candidate understands absolute periodic release, overrun handling, and the limits of tick-based timing.
The calculated WCET utilization is 50%, so the task set passes a sufficient utilization test, but I would accept it only after response-time analysis.
- The utilization is 0.4/2 + 1/5 + 2/20 = 0.50 using worst-case execution times, not measured average CPU load.
- Under rate-monotonic priorities, the sufficient Liu and Layland bound for 3 tasks is about 0.779, so 0.50 passes that conservative test.
- I would add interrupt execution, context-switch cost, release jitter, and worst-case mutex blocking before treating the result as final.
- I would confirm every task's calculated response time is below its 2 ms, 5 ms, or 20 ms deadline and validate the assumptions on the target.
Why interviewers ask this: The interviewer is checking whether the candidate can calculate schedulability from WCET values while recognizing that utilization alone omits blocking and interrupt costs.
I would use a bounded queue with at least 12 entries and choose 16 entries to provide measured margin.
- The ISR would call xQueueSendFromISR with the 16-byte value or, preferably, an index into a preallocated sample pool.
- A 16-entry value queue costs 256 bytes plus queue metadata and absorbs 16 ms of production.
- The consumer would drain all available entries after the 12 ms stall instead of processing only one per wake.
- I would count queue-full events and define whether overflow drops the newest sample, drops the oldest, or raises a data-loss fault.
Why interviewers ask this: The interviewer is evaluating queue sizing from producer and stall rates, ISR-safe use, and an explicit overload policy.
I would initialize a counting semaphore to 6 so it represents the number of free DMA descriptors.
- A task takes one token before removing a descriptor from the protected free list and starts DMA only after both operations succeed.
- The DMA ISR sends the completed descriptor index with xQueueSendFromISR; a driver task returns it to the free list under the mutex and gives one token.
- A separate short mutex protects free-list metadata because a counting semaphore controls quantity, not mutual exclusion.
- Each requester gets a bounded timeout derived from its deadline, so exhausting all 6 descriptors becomes a visible error rather than an infinite wait.
Why interviewers ask this: The interviewer is checking whether the candidate models a finite resource count correctly and does not misuse a counting semaphore as a data-structure lock.
I would use a binary semaphore because repeated edges may coalesce while one rescan is pending.
- The ISR gives the semaphore with xSemaphoreGiveFromISR and requests a yield if the higher-priority worker becomes ready.
- The worker takes it, reads all GPIO state once, performs debouncing, and blocks again.
- A second give while the semaphore is already available does not count another edge, which matches this rescan requirement.
- If every one of the 200 Hz edges had to be preserved, I would use a counting notification or queue instead.
Why interviewers ask this: The interviewer is evaluating whether the candidate understands binary semaphore coalescing and can distinguish signaling from event counting.
I would protect the whole I2C transaction with a FreeRTOS mutex owned by task context.
- The mutex covers address, transfer setup, completion, and recovery so bytes from two clients cannot interleave.
- A FreeRTOS mutex provides priority inheritance, while a binary semaphore does not, so the mutex is the correct lock for shared ownership.
- Each caller uses a timeout based on its deadline and releases the mutex on every success and error path.
- I would keep callbacks from taking the same mutex recursively and place long retry delays outside the 2 ms critical section.
Why interviewers ask this: The interviewer is checking correct mutex semantics, bounded lock duration, and the specific priority-inheritance distinction from binary semaphores.
I would assign three event bits and wait for all of them without clearing them on a successful wait.
- Link, DHCP, and time-sync owners set bits 0, 1, and 2 when ready and clear their own bit immediately when state is lost.
- The dependent task calls xEventGroupWaitBits with wait-for-all enabled and a finite 1 s recheck timeout.
- Readiness is level state, not an event count, so an event group fits better than three queues.
- After waking, the task rechecks the actual subsystem states because multiple setters and reconnects can race with the wait result.
Why interviewers ask this: The interviewer is evaluating whether event bits are used for combined level conditions with deliberate clear and race semantics.
I would use a direct task notification instead of allocating a queue or semaphore.
- The ISR calls vTaskNotifyGiveFromISR, then portYIELD_FROM_ISR when xHigherPriorityTaskWoken is set.
- The task calls ulTaskNotifyTake with clear-on-exit disabled if every one of the 20,000 completions per second must be counted.
- If only the latest buffer state matters, I would clear on exit and let repeated completions coalesce.
- This design is limited to the single known receiver, which is exactly why it is smaller and faster than a general queue.
Why interviewers ask this: The interviewer is checking whether the candidate can choose the lowest-overhead FreeRTOS primitive and configure its counting semantics correctly.
I would eliminate unbounded runtime allocation and make the 64 KB budget auditable at build and startup time.
- Task stacks, queues, protocol buffers, and driver requests would come from static storage or fixed-size pools.
- If heap_4 is retained for startup construction, I would freeze allocation after initialization and record the minimum-ever-free heap.
- Fixed pools make exhaustion and maximum latency explicit, while repeated variable-size allocation can fragment the heap over 5 years.
- I would measure task stack high-water marks under stress and reserve at least 20% margin for the worst observed path.
Why interviewers ask this: The interviewer is evaluating deterministic memory ownership and evidence-based sizing for a long-lived constrained device.
I would supply storage for every kernel object and enable FreeRTOS static allocation support.
- Each task gets a StaticTask_t control block and a fixed StackType_t array passed to xTaskCreateStatic.
- Each queue gets a StaticQueue_t plus a correctly aligned byte buffer, while each mutex is created with xSemaphoreCreateMutexStatic.
- The application provides static idle-task and timer-task memory through the required FreeRTOS callbacks when those tasks are enabled.
- All 8 task stacks and 8 synchronization objects have program-lifetime storage, and a link map verifies the final RAM total.
Why interviewers ask this: The interviewer is checking practical knowledge of FreeRTOS static APIs, backing storage, and kernel-owned task memory.
With an immediate priority-ceiling protocol, H has a one-job blocking bound of 700 us, so the design exceeds its 500 us blocking budget.
- Both resource ceilings equal H's priority because H can lock SPI and calibration, preventing circular lock chains under the chosen protocol.
- The bound is max(700, 300, 200) = 700 us rather than the sum of every lower-priority critical section.
- A ceiling prevents unbounded inversion but does not shorten 700 us, so I would split L's SPI transfer into protocol-safe chunks below 500 us, schedule it outside H's window, or use another controller.
- I would measure actual hold times and rerun response-time analysis for H, M, and L, including ceiling and context-switch overhead.
Why interviewers ask this: The interviewer is checking whether the candidate can calculate protocol-specific mutex blocking and recognize when priority ceiling must be combined with a shorter resource hold.
I would make cancellation cooperative and route every outcome through one structured cleanup path that knows exactly which resources are held.
- A local operation state records SPI ownership, any buffer or descriptor, filesystem ownership, and whether a durable write has begun.
- The filesystem lock uses a bounded wait; on timeout or cancellation, the task stops before starting new work and releases only the resources it actually owns in reverse order.
- The task is never forcibly deleted while holding SPI, and chip select, DMA, descriptors, and the SPI mutex are returned or aborted through the driver owner's documented sequence.
- Persistent changes use staging and a commit marker so cleanup leaves either the old complete record or the new complete record, then fault injection checks every cancellation point.
Why interviewers ask this: The interviewer is checking structured cancellation after partial acquisition, including bounded waits, exact ownership, and cleanup of both volatile and persistent state.
I would model every descriptor as FREE, DMA_OWNED, or WORKER_OWNED and treat pool exhaustion as an explicit overrun.
- The ISR snapshots the completion status and descriptor ID before any required write-one-to-clear operation, changes DMA_OWNED to WORKER_OWNED, and publishes the ID with xQueueSendFromISR plus a conditional yield.
- The worker validates the ID and generation, processes it, then returns exactly that descriptor to FREE through the driver-owned free list.
- At 10 kHz the pool covers only 800 us of worker lag; if no FREE entry remains, hardware backpressure or DMA stop is used where supported, otherwise the frame is dropped and counted without overwriting owned data.
- Queue-full counts, pool high-water use, maximum worker lag, descriptor-state violations, and sequence gaps are retained and checked under worst-case load.
Why interviewers ask this: The interviewer is evaluating a finite DMA ownership protocol that makes worker lag and descriptor exhaustion observable instead of relying only on ISR-safe queue calls.
Only ISRs configured at numeric priority 5 through 15 may call eligible FreeRTOS FromISR APIs.
- On Cortex-M, lower numeric NVIC priority means higher urgency, the opposite direction from FreeRTOS task-priority numbers.
- Priorities 0 through 4 are too urgent to enter the kernel and must communicate through hardware state handled later by an eligible ISR or task.
- CMSIS NVIC_SetPriority normally takes the unshifted value 0 through 15, while configMAX_SYSCALL_INTERRUPT_PRIORITY uses the register-shifted representation on typical ports.
- I would use configASSERT and inspect the port configuration to catch a priority-4 ISR accidentally calling xQueueSendFromISR.
Why interviewers ask this: The interviewer is checking the two opposite priority number conventions and the exact eligibility boundary for FreeRTOS API calls.
I would keep the 1 kHz tick for active scheduling and enable tickless idle for the 30 s idle intervals.
- A 1 kHz tick gives 1 ms granularity but wakes the CPU 1,000 times per second if ticks are never suppressed.
- Tickless idle programs a low-power timer for the next deadline and advances the kernel tick count after wake.
- I would validate low-power timer drift, maximum suppressible interval, and all wake sources across the full 30 s sleep.
- The 2 ms loop still needs measured latency, and any sub-tick phase requirement should use a hardware timer rather than a faster global tick.
Why interviewers ask this: The interviewer is evaluating the timing, power, and clock-accuracy trade-offs of periodic ticks and tick suppression.
I would program the low-power timer for the earliest kernel or application deadline, so this sleep ends no later than the 5 s deadline.
- The application deadline is registered on the same monotonic time base before the scheduler calculates the suppressible tick interval.
- Sleep entry atomically rechecks pending work and the earliest deadline, then uses the platform's required barriers so an interrupt cannot be lost between the check and WFI.
- On wake, the port converts measured low-power timer ticks into elapsed RTOS ticks and advances kernel time with its documented tickless mechanism before releasing due work.
- If wake is late, the task receives the real elapsed time, records deadline lateness, processes the overdue event once, and enters the defined safe fallback when its tolerance is exceeded.
Why interviewers ask this: The interviewer is checking whether tickless sleep honors the earliest software deadline and restores time correctly after normal and late wake-ups.
I would measure worst-case response time on the release build under deliberately hostile concurrent load.
- Hardware timer capture or DWT_CYCCNT records release-to-completion cycles around the function with interrupts and DMA enabled.
- I would run at least 10 million periods while exercising maximum bus traffic, cache states, and all higher-priority ISRs.
- The result includes preemption and mutex blocking, not only the isolated function's average execution time.
- I would report the observed maximum against 500 us with measurement overhead and a justified engineering margin.
Why interviewers ask this: The interviewer is evaluating whether determinism is established from end-to-end worst-case evidence rather than average benchmark timing.
I would measure actual update edges with hardware timestamps and separate release jitter from execution jitter.
- Toggle a spare GPIO at task release and at the PWM register write, then capture at least 1 million intervals with a logic analyzer or timer input capture.
- Calculate minimum, maximum, and a histogram, with acceptance based on the worst observed deviation from 1 ms rather than only p99.
- A second trace channel marks long ISRs or scheduler locks so outliers can be correlated with interrupt masking.
- If task wakeup exceeds 20 us, I would move the phase-critical update to a timer compare or DMA trigger and let the task prepare the next value.
Why interviewers ask this: The interviewer is checking whether the candidate can measure real output timing, distinguish jitter sources, and move precision work into hardware when needed.
Locked questions
- 21
An EEPROM write takes 8 ms, but a motor-control task has a 1 ms deadline; would you build a blocking driver or an asynchronous state machine?
estimationasync - 22
A UART receives 1024-byte frames at 3 Mbit/s every 4 ms, and CPU use for reception must stay below 5%; how would you combine DMA and interrupts?
interruptsperipherals - 23
An ADC streams 8 channels at 20 ksample/s each with 16-bit samples; how would you design double buffering so processing never races DMA?
designperipheralsconcurrency - 24
A UART runs at 230400 bit/s, may deliver a 600-byte burst, and its parser can stall for 15 ms; how would you size and implement the receive ring buffer?
peripherals - 25
An Ethernet MAC has 4 receive buffers of 1536 bytes, and the network stack may retain a packet for 20 ms; how would you make zero-copy ownership safe?
ownership - 26
One product family uses 2 SPI peripherals on STM32 and another uses 2 on NXP MCUs; how would you design a register abstraction without hiding important hardware differences?
designperipheralsoop - 27
An I2C sensor normally responds in 2 ms but can hold a transaction forever after a brownout; how would you design timeout and recovery?
designresilienceperipherals - 28
A Cortex-M7 with a 32-byte write-back D-cache uses DMA for 1500-byte Ethernet TX and RX buffers; what cache maintenance would you perform?
peripheralsmcucaching - 29
A Cortex-M7 DMA driver receives 100-byte packets into adjacent buffers while the cache line is 32 bytes; how would you align buffers and maintenance ranges?
peripheralsmcucaching - 30
A Cortex-M7 driver writes 8 DMA descriptors and then starts the engine through a control register; where would you use memory barriers?
peripheralsmcumemory - 31
Three clients queue I2C operations, and one client cancels its timed-out request while another transaction is active. How would you design transaction identity, cancellation, and recovery?
designresilienceperipherals - 32
A noisy 1 MHz SPI link carries 64-byte commands and must detect corrupted, missing, and repeated frames; how would you design the frame?
designperipheralsevm - 33
A module sends UART data at 921600 bit/s and the MCU may pause consumption for 40 ms; how would you prevent receive loss with flow control?
peripherals - 34
A 500 kbit/s Classical CAN bus has 8 nodes, each sending 200 frames/s with 8 data bytes; how would you estimate and control bus load?
estimationperipherals - 35
On a 500 kbit/s CAN bus, a 1 kHz control frame uses ID 0x080 and a 100 Hz diagnostic frame uses ID 0x600; how does arbitration affect your design?
designperipherals - 36
A 1 Mbit/s CAN network over 20 m shows rising error counters and occasional bus-off nodes; how would you design physical checks and recovery?
design - 37
A 19.2 kbit/s LIN cluster has 1 master, 6 slaves, and a 20 ms control cycle; how would you design the schedule?
design - 38
A Cortex-M gateway must receive 20 Mbit/s of UDP over 100BASE-TX with a 2 ms processing budget; how would you divide Ethernet responsibilities?
gatewaynetworkingmcu - 39
A battery sensor advertises over BLE every 500 ms and, once connected, sends a 20-byte measurement at 10 Hz; what GAP and GATT roles would you choose?
- 40
A device has a 220 mAh coin cell and must last 12 months while waking for 10 ms every 60 s at 8 mA; how would you build the power budget?
- 41
An MCU runs at 80 MHz for a 1 ms computation every 10 ms and is otherwise idle; how would you manage clocks to reduce energy?
- 42
A board has 6 sensors but only 2 are used during a typical 30 s measurement interval; how would you gate peripheral power safely?
peripherals - 43
An alarm input requires a response within 250 us, but the deepest sleep mode wakes in 600 us and a light mode wakes in 40 us at 120 uA; which mode would you choose?
- 44
A device has 2 MB of flash, a 128 KB bootloader, and firmware images up to 700 KB; how would you lay out a dual-slot OTA bootloader?
firmware - 45
An OTA image is written in 2 KB flash pages and power may fail after any page; how would you make download and activation power-loss safe?
activation - 46
A new OTA image must prove healthy within 30 s and may be tried at most 3 times; how would you design rollback and version metadata across resets?
designrollback - 47
An 80,000-line C firmware project follows MISRA C:2012 and currently has 12 required-rule deviations; how would you govern those deviations?
firmware - 48
Static analysis reports 300 findings two days before release, including 4 high-severity defects; how would you reach a defensible release decision?
severity-prioritydefects - 49
A motor controller runs a 10 kHz loop, reads 8 analog channels, and communicates over CAN; how would you design a hardware-in-the-loop test bench?
communicationdesign - 50
Firmware CI builds 3 hardware targets on every commit; which artifacts, map data, and test evidence would you retain for a release?
firmwareartifacts - 51
A FreeRTOS task with a 512-byte stack crashes only during JSON error reporting. How would you debug it?
rtos - 52
A high-priority task wakes every 100 microseconds and the lower-priority logger stops running. What would you change?
- 53
A high-priority control task waits 8 ms for an SPI mutex held by a low-priority task while a medium-priority task runs. What is happening?
evmconcurrencyperipherals - 54
Two RTOS tasks freeze twice per day: one locks the I2C bus then a sample buffer, while the other locks them in the opposite order. How do you fix it?
rtosperipherals - 55
A 32-entry RTOS queue fills when a sensor produces 2,000 messages per second but its consumer handles only 1,500. What would you do?
rtosdata-structures - 56
A 1 ms motor-control deadline is missed once every 20 seconds after logging was added. How would you isolate and fix it?
estimationlogging - 57
A device fails after about 49.7 days because it compares a 32-bit millisecond tick with an absolute timeout. How do you correct it?
resilience - 58
A device with 96 KB of RAM reports heap allocation failure after 36 hours, although free memory never reaches zero. How would you investigate?
memorydata-structures - 59
A field unit resets three times per night and the reset-cause register says watchdog. What data do you capture and how do you proceed?
reliability - 60
An RTOS device freezes for 200 ms every seven minutes, but printf logging changes the behavior. How would you use trace analysis?
loggingtracingrtos - 61
An input edge reaches its ISR 28 microseconds later, but the requirement is under 10 microseconds. How do you find the latency source?
interruptslatency - 62
A nested Cortex-M ISR exits, but lower-priority interrupts unexpectedly remain masked because BASEPRI is restored incorrectly. What evidence and save/restore pattern do you use?
interruptsmcu - 63
One interrupt is lost roughly once per 10,000 external pulses. How would you determine whether firmware or hardware loses it?
firmwareinterrupts - 64
A Cortex-M7 ADC DMA buffer sometimes contains samples from the previous cycle. What cache operations and buffer layout do you use?
peripheralsmcucaching - 65
DMA UART output is corrupted because a task reuses the TX buffer immediately after starting the transfer. How do you redesign ownership?
peripheralsownership - 66
A 20 ksample/s ADC uses a 256-sample circular DMA buffer, and data is overwritten when processing stalls for 18 ms. How do you handle it?
soft-skillsconcurrencyperipherals - 67
An ISR pushes bytes at 10 kHz into a ring buffer while a task consumes them, and the indices occasionally become inconsistent. How do you remove the race?
interrupts - 68
A second core sees a DMA descriptor ready flag but occasionally reads the old descriptor fields. What memory-ordering fix is required?
peripheralsmemorydescriptors - 69
An I2C peripheral times out after 25 ms and remains unusable until the whole MCU resets. How would you recover only that peripheral?
peripherals - 70
A GPIO interrupt suddenly fires 40,000 times per second after a driver change. What do you inspect first?
interruptsperipherals - 71
An I2C sensor NACKs about one transaction in 500 at 400 kHz. How would you diagnose it?
transactionsperipherals - 72
SDA remains low after 18 hours on a multi-master I2C bus. Would you send nine recovery clocks?
peripherals - 73
A 10 MHz SPI receive stream is shifted by one bit on roughly one frame in 1,000. What evidence would you collect?
evmperipherals - 74
SPI works after a cold boot but returns wrong bytes after a warm peripheral reset. How would you test for the wrong mode?
peripheralsevm - 75
A 115200-baud UART shows 2% framing errors after the MCU switches clocks. How do you confirm the cause?
peripherals - 76
A UART at 921600 baud overruns during a 4 KB burst even though short messages work. What would you change?
peripherals - 77
A CAN RX FIFO overruns at 6,000 frames/s because hardware filters currently accept every identifier. How would you reduce admission and prove the receive service budget?
- 78
A 500 kbit/s CAN network works on the bench but fails on a 30 m harness, where resistance across CANH and CANL measures 120 ohms with power off. What does that suggest?
- 79
A CAN bus reaches 92% utilization and a 10 ms control frame starts missing deadlines. How would you reduce the load?
estimationperipherals - 80
A BLE notification sometimes takes 150 ms although the application queues it immediately with a 30 ms connection interval and slave latency four. How would you investigate the delay?
latencydata-structures - 81
A regulator switches between run and sleep modes, but its 18 uA quiescent current remains in sleep and exceeds the board's 10 uA budget. How would you measure the transition and choose the regulator or configuration?
config - 82
A device expected to wake once every 10 minutes wakes 120 times per second after installation. How would you diagnose the wake storm?
- 83
One in 5,000 wakeups faults while switching from a low-speed clock to the PLL. What sequence would you verify?
- 84
A flash ECC error occurs while resuming a partially downloaded image in the inactive OTA slot. What should the updater and bootloader do?
firmware - 85
Rollback boots the old firmware, but the new firmware has already migrated persistent configuration to a new schema. How would you keep rollback able to read or recover the data?
configrollbackschema - 86
A single corrupted boot-metadata word leaves the device unable to choose either valid image. How would you harden the metadata?
- 87
A 3.3 V battery rail dips to 2.7 V for 8 ms during radio transmit and the MCU resets. How would you prove and fix the brownout?
- 88
Boot takes 1.8 seconds but the product must signal readiness within 800 ms. How would you optimize it without skipping safety checks?
optimizationhealth-checks - 89
MISRA analysis flags a signed and unsigned comparison in a sensor-limit check. How would you resolve it?
- 90
Coverity reports a possible null dereference in a driver state that the team believes is unreachable. What do you do?
fundamentals - 91
A HIL test fails about once in 300 overnight runs but never at a developer's desk. How would you make it actionable?
- 92
A vendor erratum says the UART can miss a DMA request when DMA is re-enabled within two peripheral clocks. How would you apply the workaround?
peripheralsprocurement - 93
After a vendor HAL upgrade, an SPI display fails because the CS gap grows from 2 microseconds to 14 microseconds. How do you handle the regression?
evmprocurementsoft-skills - 94
After a linker-script change, a Cortex-M7 can read an RX buffer but DMA reports a transfer error on every receive. How would you diagnose and fix it?
peripheralsmcu - 95
A 1 ms signal-processing task takes 1.35 ms, and profiling shows floating-point square root consumes 420 microseconds. How would you optimize it?
optimizationprofilingconcurrency - 96
A deployed device resets about once per week. What would you put in a field crash dump with only 1 KB of retained storage?
deployment - 97
A bug occurs only on one production hardware lot at minus 20 degrees Celsius and disappears when a debugger is attached. How would you reproduce it?
debugging - 98
A review proposes packed, unaligned DMA buffers to save RAM. How would you explain the risk and replace the layout?
peripherals - 99
A code review adds a 3 ms global critical section to fix a race in a control system that must run every 1 ms. How would you review and replace the change?
code-reviewsystem-design - 100
A new firmware causes UART timeouts on 0.7% of units at the factory end-of-line station. How would you lead the investigation?
resiliencefirmwareperipherals