BitBench

Firmware practice without the noise.

Embedded C problems, systems prompts, and fundamentals in a quiet workspace built for firmware engineers.

problems
101
topics
10
workspace
C11
solution.cC
RunSubmit
1#include <stdint.h>
2
3#define GPIOA_BSRR (*(volatile uint32_t *)0x40020018)
4
5// Drive PA5 high — atomic set via the BSRR register
6void led_on(void) {
7 GPIOA_BSRR = (1u << 5);
8}
Accepted
2 ms132 KB
  • 01sets the target bit
  • 02preserves neighbor bits
  • 03atomic write
Practice

Pick the interview surface.

Coding is one part of the loop. The rest is architecture, debugging, and fundamentals under pressure.

Topics

Built around real low-level work.

Embedded C

Pointers, volatile, fixed-width types, and the C that runs on metal.

Bit Manipulation

Masks, shifts, and register flags without disturbing neighbors.

Memory-Mapped I/O

Drive peripherals through volatile register pointers.

Communication Protocols

UART, SPI, and I2C framing, parsing, and checksums.

RTOS

Tasks, ISRs, atomicity, and shared-state race conditions.

Debugging

Inspect broken firmware and explain the root cause.

State Machines

Non-blocking timing, debouncing, and protocol framing.

Bootloaders

Image integrity, CRCs, and safe OTA update flows.

Systems Design

Architect firmware: schedulers, drivers, and recovery.

Memory Management

Static allocation, pools, and fragmentation-free design.

Flow

Read. Write. Run. Review.

01

Read the spec

Each exercise starts from a focused embedded problem statement, not a puzzle wrapped in a story.

02

Write embedded C

Use the in-browser editor for register work, buffers, protocols, and small systems code.

03

Review the result

Run against a stable judge contract and see the failure point without leaving the page.

Example

A problem should read like a real spec.

Short statement. Clear signature. Examples you can verify.

EasyBit Manipulationaccount required

Set, Clear, and Toggle Register Bits

Modify a single bit of an 8-bit hardware register using masks — without touching the others.

Function signature
uint8_t set_bit(uint8_t reg, uint8_t bit);
uint8_t clear_bit(uint8_t reg, uint8_t bit);
uint8_t toggle_bit(uint8_t reg, uint8_t bit);
Create an account to open it

Get notified when new material lands.

Occasional product updates. No problem counts. No spam.

BitBench — Firmware & Embedded Interview Practice