Embedded systems practice problems
Every problem on DeetCode, grouped by language: 260 problems covering firmware, digital design, DSP, protocols and hardware debugging, each with constraints and starter code.
C
52 problems- Circular Buffer for UART RXMemoryMedium
- PID Controller ImplementationControlHard
- Debounce Input SignalIOMedium
- Set, Clear, Toggle Bits in RegisterMemoryEasy
- LED Status FSMFSMEasy
- Count Error Flags in Status WordMemoryEasy
- Fixed-Point Multiply (Q15)DSPMedium
- Interrupt-Safe Ring BufferConcurrencyHard
- Bootloader Jump RoutineArchitectureHard
- Convert ADC Code to VoltageDSPEasy
- Delay Using Busy LoopControlEasy
- Watchdog Recovery LogicControlHard
- Software PWM GenerationControlMedium
- Version Info APIArchitectureEasy
- Low-Latency Control LoopControlHard
- Memory-Mapped Driver AbstractionMemoryHard
- Parse Simple Command StringProtocolsEasy
- Lock-free Flag Using AtomicsConcurrencyHard
- Timer-based Task SchedulerConcurrencyMedium
- Set and Clear GPIO BitMemoryEasy
- UART Frame Decoder with ResyncMemoryQualcommHard
- Set and Clear GPIO BitsIOTexas InstrumentsEasy
- Busy-Wait Delay LoopTimingSTMicroelectronicsEasy
- Software Debounce FilterRobustnessContinentalMedium
- Circular Buffer PushData FlowNXPMedium
- Reverse Bits in a ByteMathIntelEasy
- CRC-8 Checksum CalculationProtocolsBoschMedium
- Endian Swap 32-bit WordData FlowNVIDIAEasy
- Count Set Bits (Population Count)OptimizationQualcommEasy
- Fixed-Point Square RootPrecisionAnalog DevicesHard
- Stack Canary CheckSecurityARMMedium
- Priority Encoder LookupOptimizationTexas InstrumentsEasy
- Debounce State Machine in CFSMGarminMedium
- Memory Pool with Free ListMemoryMicronHard
- Safe strncpy ImplementationRobustnessCiscoMedium
- I2C Bit-Bang DriverInterfacingNXPHard
- Watchdog Kick SchedulerRecoveryContinentalMedium
- Linked List Cycle DetectionDebuggingMicrosoftMedium
- Align Pointer to BoundaryMemoryWestern DigitalEasy
- Bit Field Packing for Register MapConfigurationRenesasMedium
- Interrupt Latency CounterTimingInfineonMedium
- Fletcher-16 ChecksumValidationHoneywellMedium
- Circular DMA Buffer IndexData FlowSTMicroelectronicsHard
- Gray Code Encoder and DecoderMathSeagateEasy
- Null-Safe Command TokenizerRobustnessZohoMedium
- Binary Search on Sorted Lookup TableOptimizationAppleEasy
- Fault Injection Guard MacrosSafetySiemensHard
- Non-Blocking Delay with TimestampsSchedulingTeslaMedium
- Compute Parity of WordVerificationBroadcomEasy
- Ring Buffer with Overwrite ModeMemoryMarvellMedium
- Bit Trie for Longest Prefix MatchOptimizationJuniper NetworksHard
- Protothreads with Local ContinuationsConcurrencyEspressif SystemsHard
Verilog
38 problems- UART Receiver FSMProtocolsHard
- D Flip-Flop with ResetFSMEasy
- LED BlinkerFSMEasy
- AND/OR Combinational BlockFSMEasy
- FSM Traffic ControllerFSMMedium
- Pipelined AdderArchitectureHard
- 2:1 MultiplexerFSMEasy
- Clock DividerFSMMedium
- Shift RegisterFSMMedium
- Counter with EnableFSMMedium
- AXI-lite Register BankProtocolsHard
- CDC SynchronizerConcurrencyHard
- Simple ALUArchitectureMedium
- Pipelined Register BankArchitectureHard
- Pipelined FIFOMemoryHard
- UART TX ModuleProtocolsHard
- Johnson CounterFSMLattice SemiconductorEasy
- Synchronous FIFO with Almost-Full FlagMemoryNVIDIAHard
- Round-Robin ArbiterArbitrationAMDHard
- Gray Code Counter for CDCSynchronizationIntelMedium
- SPI Master ControllerProtocolsTexas InstrumentsHard
- Barrel ShifterOptimizationAppleMedium
- One-Hot FSM Vending MachineFSMQualcommMedium
- Parity Generator and CheckerValidationBroadcomEasy
- Pulse StretcherTimingMicronEasy
- Booth MultiplierMathAMDHard
- Debouncer with CounterRobustnessGarminMedium
- Priority Encoder 8-to-3ControlMarvellEasy
- Dual-Port RAMMemoryXilinxMedium
- Edge DetectorTimingSamsungEasy
- LFSR Pseudo-Random GeneratorSecuritySynopsysMedium
- Watchdog Timer ModuleReliabilityBoschMedium
- Clock Gating CellPowerMediaTekMedium
- Assertion-Based Protocol CheckerVerificationCadenceHard
- Serializer 8-to-1Data FlowBroadcomMedium
- Carry-Save Adder StageArchitectureNVIDIAHard
- Reset SynchronizerInitializationIntelMedium
- Detect Metastability WindowDeterminismIntelHard
Python
37 problems- Async Serial + Socket BridgeConcurrencyHard
- Read Serial Data and LogIOEasy
- Automated Regression TesterVerificationHard
- Multithreaded Data LoggerConcurrencyMedium
- Parse Sensor PacketProtocolsEasy
- MQTT Publish ClientProtocolsMedium
- HTTP REST Sensor UploadProtocolsMedium
- CLI Tool for SensorsIOEasy
- Data Pipeline with BufferingConcurrencyHard
- Binary Packet Encoder/DecoderProtocolsMedium
- Moving Average ComputationDSPEasy
- Read Serial and Log CSVIOEasy
- Compute Moving AverageDSPEasy
- UART Sensor Packet ParserProtocolsBoschMedium
- Parse Intel HEX FilePackagingLattice SemiconductorMedium
- Decode CAN Bus FramesProtocolsContinentalMedium
- Compute FFT Peak FrequencyDSPAnalog DevicesMedium
- Simulate RC Circuit Step ResponseEstimationTexas InstrumentsMedium
- Register Map YAML to C HeaderBuildSynopsysHard
- Detect Clock Jitter from TimestampsTimingCadenceMedium
- Serial Port Auto-Baud DetectionInterfacingSilicon LabsHard
- Bit Error Rate CalculatorValidationEricssonMedium
- Firmware Binary Diff ToolDebuggingSeagateMedium
- Sensor Calibration Least SquaresCalibrationBoschHard
- Thermal Throttle SimulatorPowerIntelMedium
- Round-Robin Task Scheduler SimulationSchedulingNokiaMedium
- Memory Leak Detector from LogsObservabilityJuniper NetworksMedium
- Generate PWM Duty TableMathMicrochipEasy
- Verify Checksum of Firmware ImageVerificationWestern DigitalEasy
- Priority Inversion DetectorArbitrationQualcommHard
- Quantize Filter CoefficientsPrecisionMediaTekMedium
- Parse ELF Section SizesBuildARMHard
- Sliding Window Peak DetectorDSPGarminEasy
- Boot Time ProfilerOptimizationRivianMedium
- State Coverage ReportVerificationCadenceMedium
- I2C Address Scanner SimulationInterfacingBroadcomEasy
- Log Ring with TimestampsObservabilityZohoEasy
C++
34 problems- GPIO Wrapper ClassArchitectureEasy
- Lock-free Queue ClassConcurrencyHard
- RAII Resource GuardMemoryMedium
- State Machine ClassFSMEasy
- Template-Based Register AccessArchitectureMedium
- Custom Memory Pool AllocatorMemoryHard
- Zero-overhead HAL TemplatesArchitectureHard
- Event Callback FrameworkConcurrencyMedium
- Custom Ring Buffer ClassMemoryMedium
- Static Polymorphism DriversArchitectureHard
- Compile-time Constants constexprArchitectureMedium
- Scoped Interrupt Lock (RAII)ConcurrencyARMMedium
- Type-Safe Register Bitfield TemplateAbstractionAppleHard
- Observer Pattern for Sensor EventsArchitectureBoschMedium
- Compile-Time CRC TableOptimizationNVIDIAHard
- Static Ring Buffer TemplateMemoryQualcommMedium
- Variant Command DispatcherAbstractionGoogleHard
- Move-Only Buffer HandleResource ManagementMicrosoftMedium
- Fixed-Point Arithmetic ClassPrecisionAnalog DevicesHard
- Placement New Object PoolMemoryMicronHard
- Chrono-Based Software TimerTimingGarminMedium
- CRTP Driver InterfaceAbstractionIntelHard
- Thread-Safe Singleton LoggerConcurrencyCiscoMedium
- Span-Based Packet ViewData FlowMarvellMedium
- Enum Class Bitmask OperatorsAbstractionSamsungEasy
- Exception-Free Result TypeRobustnessTeslaMedium
- Constexpr Sine Lookup TableDSPMediaTekHard
- Deterministic Fixed AllocatorDeterminismHoneywellHard
- Unit-Safe Physical QuantitiesValidationSiemensMedium
- Circular Iterator AdapterAbstractionWestern DigitalMedium
- Lock-Free SPSC QueueSynchronizationNVIDIAHard
- Priority Task QueueSchedulingContinentalMedium
- Bit-Packed Struct SerializerPackagingBroadcomMedium
- Heap Fragmentation AnalyzerMemoryMicronHard
MATLAB
28 problems- Kalman Filter (1D)DSPHard
- FFT Spectrum AnalyzerDSPMedium
- FIR Low-pass Filter DesignDSPMedium
- Compute RMS of SignalDSPEasy
- Plot Noisy SignalDSPEasy
- Generate Sine WaveDSPEasy
- Quantization of SignalDSPMedium
- FIR Filter QuantizationDSPMedium
- Moving Average FilterDSPMedium
- Stability AnalysisControlHard
- FFT-based Spectrum ToolDSPMedium
- PID Control SimulationControlHard
- Low-pass FIR FilterDSPMedium
- Design IIR Butterworth FilterDSPAnalog DevicesMedium
- Estimate SNR of SignalEstimationEricssonEasy
- Bode Plot Stability MarginsControlHoneywellHard
- Simulate Motor Speed ControlControlTeslaHard
- Compute Total Harmonic DistortionDSPTexas InstrumentsMedium
- Window Function ComparisonDSPNokiaMedium
- Least Squares Line Fit with Outlier RejectionMathBoschEasy
- ADC Nonlinearity INL and DNLCalibrationAnalog DevicesHard
- Eye Diagram GenerationValidationBroadcomHard
- Digital PLL Loop FilterControlMarvellHard
- Resample Signal Rate ConversionDSPMediaTekMedium
- Temperature Sensor LinearizationCalibrationMicrochipEasy
- Monte Carlo Timing AnalysisEstimationSynopsysHard
- Battery State of Charge EstimatorEstimationRivianHard
- Detect Signal ClippingDebuggingGarminEasy
VHDL
27 problems- Shift Register ModuleFSMMedium
- Parameterized TimerFSMHard
- UART TransmitterProtocolsHard
- FIFO with FlagsMemoryHard
- PWM ModuleControlMedium
- LED Blinker ProcessFSMEasy
- Comparator BlockFSMMedium
- D Flip-Flop ProcessFSMEasy
- FSM ControllerFSMMedium
- Testbench with AssertionsVerificationHard
- Shift Register (VHDL)FSMMedium
- Register with ResetFSMEasy
- Binary to BCD ConverterMathSiemensMedium
- Up-Down Counter with LoadControlInfineonEasy
- Moore FSM Sequence DetectorFSMBoschMedium
- Synchronous ROM with InitialisationMemoryLattice SemiconductorEasy
- Clock Enable GeneratorTimingSTMicroelectronicsEasy
- 4-bit Ripple Carry AdderMathRenesasEasy
- Register File with Two Read PortsArchitectureARMMedium
- Traffic Light Controller with Pedestrian RequestControlContinentalMedium
- Hamming Code EncoderReliabilityHoneywellHard
- Async FIFO Pointer LogicSynchronizationXilinxHard
- PWM with Configurable ResolutionControlInfineonMedium
- Seven-Segment Decoder with BlankingIOSamsungEasy
- Stopwatch with Lap RegisterFSMGarminHard
- SPI Slave Shift LogicProtocolsNXPMedium
- Delay Line with Generic DepthConfigurationAnalog DevicesMedium
Assembly
24 problems- Sum Array ElementsMemoryMedium
- Toggle Bit in MemoryMemoryEasy
- ISR Context Save/RestoreConcurrencyHard
- Memory Copy RoutineMemoryMedium
- Circular Buffer Pointer LogicMemoryHard
- Function Prologue/EpilogueArchitectureMedium
- Add Two Numbers in RegistersMathEasy
- Fast Multiply Using Shifts/AddsMathHard
- Array Sum LoopMathMedium
- Fast Bit Toggle Using XORMemoryEasy
- Multiplier via ShiftsMathHard
- Add Two 16-bit NumbersMathMicrochipEasy
- Memcpy in ARM AssemblyMemoryARMMedium
- Count Leading ZerosOptimizationQualcommMedium
- Software Delay Loop CalibrationTimingTexas InstrumentsMedium
- Interrupt Vector Table SetupInitializationSTMicroelectronicsHard
- Stack Frame InspectionDebuggingIntelHard
- Atomic Compare and SwapSynchronizationARMHard
- Checksum Over Flash RegionVerificationRenesasMedium
- Context Switch RoutineOSSiemensHard
- Sleep Mode Entry SequencePowerNordic SemiconductorMedium
- Jump Table DispatchControlNXPMedium
- Multiply Without MUL InstructionMathMicrochipMedium
- Bit Reversal for FFT AddressingDSPAnalog DevicesMedium
Shell
20 problems- Parse Log File and Count ErrorsOSEasy
- Build and Flash Automation ScriptBuildMedium
- Batch Rename Firmware FilesOSEasy
- Monitor and Restart ProcessOSMedium
- OTA Update PipelineBuildHard
- Rename Firmware FilesOSEasy
- Build Automation ScriptBuildMedium
- Monitor Process and RestartOSMedium
- Batch Flash Multiple BoardsBuildTeslaMedium
- Extract Stack Usage from Map FileMemorySTMicroelectronicsMedium
- Rotate and Compress Device LogsOSCiscoEasy
- Check Cross-Compiler ToolchainConfigurationSiemensEasy
- Watch Serial Device HotplugIntegrationRed HatMedium
- Compare Two Firmware ManifestsConfigurationHoneywellMedium
- Measure Boot Log TimestampsTimingRivianMedium
- Safe Atomic File UpdateReliabilityGoogleMedium
- Parallel Test Runner with LimitsConcurrencyIntelHard
- Disk Health SMART SummaryObservabilitySeagateEasy
- Environment Sanity GuardConfigurationZohoEasy
- Generate Reproducible Release TarballPackagingNokiaMedium