Shakila Praveen Rathnayake

shakilar.com
~/ blog / Embedded / rust-for-embedded
#Rust #Embedded #Safety

Why I Switched to Rust for Embedded

August 4, 2025 | 8 min read

After years of wrestling with C on microcontrollers, I finally made the switch to Rust for embedded development. Here’s what convinced me.

The Old Way: C and Prayer

In C, buffer overflows and null pointer dereferences are runtime surprises. On a microcontroller with no debugger attached, these bugs manifest as mysterious resets.

// Classic C footgun
void process_sensor(uint8_t* buffer, size_t len) {
    for (int i = 0; i <= len; i++) {  // Off-by-one!
        buffer[i] = transform(buffer[i]);
    }
}

The Rust Way: Compile-Time Safety

Rust catches these errors before you flash the firmware:

fn process_sensor(buffer: &mut [u8]) {
    for byte in buffer.iter_mut() {
        *byte = transform(*byte);
    }
}

No index bounds to manage. No null pointers. Just safe iteration.

The Ecosystem is Ready

With embassy-rs for async embedded and probe-rs for debugging, the Rust embedded ecosystem has matured significantly.

Conclusion

If you’re building safety-critical robotics systems, Rust is worth the learning curve.

Back to all posts