Perché Rust per embedded?
Rust sta guadagnando terreno nello sviluppo embedded grazie alla sua sicurezza e performance. In questo articolo vedremo come configurare l'ambiente di sviluppo e scrivere il primo programma per Arduino.
Il sistema di ownership di Rust previene errori di memoria a compile-time, rendendo il codice più robusto fin dall'inizio. Niente più buffer overflow o use-after-free!
Setup dell'ambiente
Per iniziare avremo bisogno di:
- Rust installato (via rustup)
- Toolchain nightly per embedded
- cargo-generate per usare template
- Una scheda Arduino, STM32 o ESP32
Installiamo i componenti necessari:
rustup target add thumbv7em-none-eabihf
cargo install cargo-generate
Il primo progetto
Usiamo un template già pronto per STM32:
cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart
cd my-project
cargo build --target thumbv7em-none-eabihf
Ecco un esempio di blink classico:
#![no_std]
#![no_main]
use cortex_m_rt::entry;
use stm32f1xx_hal::{pac, prelude::*};
#[entry]
fn main() -> ! {
let dp = pac::Peripherals::take().unwrap();
let mut rcc = dp.RCC.constrain();
let mut gpioc = dp.GPIOC.split(&mut rcc.apb2);
let mut led = gpioc.pc13.into_push_pull_output(&mut gpioc.crh);
loop {
led.set_high();
cortex_m::asm::delay(8_000_000);
led.set_low();
cortex_m::asm::delay(8_000_000);
}
}
Come vedi, il codice è pulito e leggibile, con zero overhead rispetto al C.
Vantaggi concreti
Usando Rust per embedded ottieni:
- ✅ Gestione della memoria sicura senza garbage collector
- ✅ Zero-cost abstractions
- ✅ Pattern matching potente
- ✅ Ecosistema in crescita (crates come
embedded-hal)
Nel prossimo articolo vedremo come gestire interrupt e DMA. Resta sintonizzato! 🦀