In questo articolo riportiamo le istruzioni per installare Embassy (RUST) in Windows e configurare un esempio di lampeggio LED per la scheda Nucleo F401RE
Embassy è un framework asincrono per la programmazione embedded in Rust, progettato per offrire un modo efficiente e sicuro di scrivere codice non bloccante su microcontrollori e dispositivi embedded. Embassy sfrutta le caratteristiche di Rust come la gestione della memoria sicura e il controllo della concorrenza per semplificare lo sviluppo di firmware su sistemi con risorse limitate.
Caratteristiche principali di Embassy
- Asincronia e concorrenza: Embassy utilizza il modello di programmazione asincrona per gestire eventi e attività, permettendo di scrivere codice che può svolgere più attività senza bloccare il microcontrollore. Invece di utilizzare thread pesanti, Embassy usa task leggeri basati su
async
/await
, che sono più efficienti per i microcontrollori. - No_std: Embassy è progettato per funzionare senza la libreria standard (
std
), essendo quindi compatibile con ambienti embedded che spesso non hanno accesso al sistema operativo e richiedono un uso minimo di risorse. - Device driver e periferiche: Embassy fornisce driver integrati per varie periferiche e protocolli (come UART, SPI, I2C), semplificando l’interazione con l’hardware. Questi driver sono progettati per funzionare in modalità asincrona e consentono di eseguire operazioni in background senza bloccare il codice principale.
- Scheduler leggero: Embassy include un piccolo scheduler non preemptive per gestire i task asincroni in maniera efficiente, con un basso consumo di risorse. Questo scheduler è particolarmente utile per microcontrollori con memoria e potenza di calcolo limitate.
- Supporto per diverse piattaforme embedded: Embassy è compatibile con vari microcontrollori, inclusi i chip STM32, Nordic e altri, e viene costantemente aggiornato per supportare più piattaforme.
- Progettato per la sicurezza: Rust garantisce un’alta sicurezza nella gestione della memoria e nella concorrenza, riducendo drasticamente i rischi di errori di segmentazione, condizioni di gara e buffer overflow, molto comuni nella programmazione embedded tradizionale.
Guida all’installazione di Rust – Embassy su Windows e configurazione dell’esempio Blink LED su Nucleo F401RE
1. Scarica e installa Rust (include Cargo)
Cargo è lo strumento di gestione dei pacchetti e build di Rust. Installando Rust, otterrai automaticamente Cargo.
- Vai al sito ufficiale di Rust.
- Clicca su Install Rust e scarica il file di installazione.
- Esegui il file
.exe
scaricato. - Scegli “Proceed with standard installation” e segui le istruzioni, che di solito ti guideranno nell’installazione dell’ultima versione stabile di Rust e configureranno Cargo automaticamente.
2. Installa Visual Studio C++ Build Tools
Rust richiede alcuni strumenti di compilazione forniti da Visual Studio C++ Build Tools. Per installarli:
- Vai alla pagina di download dei Visual Studio C++ Build Tools e scarica l’installer.
- Esegui l’installer e segui le istruzioni per completare l’installazione.
3. Configura l’ambiente
Dopo l’installazione, verifica che Rust e Cargo siano configurati correttamente:
- Apri il Prompt dei comandi o PowerShell e digita:
rustc --version
andcargo --version
- Se ottieni versioni valide di Rust e Cargo, l’installazione è stata completata correttamente.
4. Aggiungi il percorso di Cargo al PATH
Durante l’installazione, il percorso di Cargo dovrebbe essere aggiunto automaticamente alla variabile d’ambiente PATH
. Se non è stato fatto, puoi aggiungerlo manualmente:
- Cerca “Variabili d’ambiente” in Windows e apri il pannello.
- Modifica la variabile
PATH
aggiungendo il percorso:C:\Users\YourUsername\.cargo\bin
. SostituisciYourUsername
con il tuo nome utente effettivo.
5. Verifica l’installazione
Apri nuovamente il Prompt dei comandi e riprova i comandi:
cargo --version
per assicurarti che tutto sia configurato correttamente.
6. Installa probe-rs
Per programmare la scheda Nucleo F401RE utilizzando l’ST Link, installa probe-rs
:
- Apri PowerShell come Amministratore e inserisci il comando:
irm https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.ps1 | iex
7. Configura il workspace Embassy
- Crea una cartella per il workspace, ad esempio
C:\ws_embassy
. - Apri una shell dei comandi ed entra nella cartella appena creata:
cd C:\ws_embassy
- Clona il repository di Embassy:
git clone https://github.com/embassy-rs/embassy.git
- Entra nella cartella
embassy
:
cd embassy
8. Configura l’esempio Blink LED
per la Nucleo F401RE
Per utilizzare la scheda Nucleo F401RE, è necessario modificare alcuni file di configurazione:
- Modifica il file
Cargo.toml
:
- Vai in
C:\ws_embassy\embassy\examples\stm32f4
e apri il fileCargo.toml
. - Modifica il parametro
embassy-stm32
per includere la featurestm32f401re
, ad esempio:toml
[dependencies.embassy-stm32]
version = “0.1” features = [“stm32f401re”]
- Modifica il file
config.toml
:
- Vai in
C:\WS_embassy\embassy\examples\stm32f4\.cargo
e apri il fileconfig.toml
. - Modifica il parametro
runner
in modo che corrisponda al chip della tua scheda:toml runner = "probe-rs run --chip STM32F401RETx"
- Modifica il file
blinky.rs
:
- Vai in
C:\WS_embassy\embassy\examples\stm32f4\src\bin
e apriblinky.rs
con un editor di testo come Notepad. - Modifica il pin del LED in modo che corrisponda a PA5, che è collegato al LED sulla scheda:
rust let mut led = Output::new(p.PA5, Level::High, Speed::Low);
9. Esegui l’esempio Blink LED
Per eseguire l’esempio di lampeggio del LED, apri una shell dei comandi, vai nella cartella dell’esempio stm32f4
e lancia uno dei seguenti comandi:
cargo run --release --bin blinky
oppure
probe-rs run --chip STM32F401RETx target\thumbv7em-none-eabi\release\blinky