Embedded-hal, un framework per a la creació de controladors universals a Rust

Ferris Rust

Ferris la mascota no oficial de Rust

Fa poc, el grup de treball Rust Embedded, creat per desenvolupar tecnologies per millorar la qualitat i seguretat d'aplicacions, firmware i controladors per a sistemes integrats, va presentar la primera versió del marc embedded-hal 1.0.

Embedded-hal es posiciona com un marc que serveix com a base per construir un ecosistema de controladors que són totalment independents de la plataforma, el que significa que els controladors poden ser reutilitzats en diferents microcontroladors sense necessitat de modificacions extenses.

Sobre Embedded-hal

El paquete és adequat per escriure controladors universals a Rust per a diversos sensors, pantalles, unitats i adaptadors de xarxa que no estan vinculats a models de microcontroladors específics, és a dir, el controlador creat sobre la base de embeded_hal es pot utilitzar amb qualsevol microcontrolador per al qual es proporcioni una capa HAL al paquet.

El paquete també proporciona un sistema de maneig derrors incorporat flexible: per a cada tipus derror hi ha un tipus derror, que admet eines per depurar i rastrejar les causes dels errors.

Dins dels principals objectius d'Embedded-hal es destaquen els següents:

  • Sense detalls específics del dispositiu: ni el registre, ni els blocs de registre, és a dir, cap valor específic d'un dispositiu no ha d'aparèixer a l'API.
  • Ha de ser genèric dins dun dispositiu i entre dispositius. L'API per utilitzar una interfície ha de ser la mateixa, independentment de la implementació, utilitzada.
  • Sempre que sigui possible, no ha d'estar lligat a un model asincrònic específic.
  • Ha de ser mínim i, per tant, fàcil dimplementar, però altament componible.
  • Servir com a base per construir un ecosistema de controladors independents de la plataforma. Aquí, controlador vol dir que permet que una plataforma de destinació interactuï amb un dispositiu extern com un sensor digital o un transceptor sense fil.
  • Els mètodes de trets han de ser fal·libles perquè puguin utilitzar-se en qualsevol situació possible.

Què hi ha de nou a Embedded-hal 1.0?

Embedded-hal 1.0 representa la culminació dels esforços des del 2020 para garantir estabilitat i confiança. Amb la versió 1.0 ara disponible, tots els trets de capa d'abstracció de maquinari (HAL) inclosos es consideren estables, seient una base sòlida per a futures millores i expansions.

Embedded-hal 1.0 es presenta com la primera versió estable del projecte i juntament amb això també s'han format les versions estables dels paquets complementaris com embedded-hal-async, que facilita la creació de controladors asíncrons, i embedded-hal-nb, que implementa un model de sondeig d'estat en mode de sondeig .

Juntament amb aquests paquets, s'ofereixen eines addicionals com hal-bus, dissenyat per treballar amb busos SPI i I2C, CAN, amb suport per al bus CAN (Controller Area Network) i IO, que proporciona implementacions de tipus per a entrada/sortida orientada a bytes, ideal per utilitzar amb UART i altres perifèrics.

A més, també es destaca el següent:

Enfocament en controladors: En resposta als comentaris dels usuaris i els requisits en evolució, embedded-hal 1.0 emfatitza el desenvolupament de controladors genèrics, simplificant les API i eliminant-ne les complexitats d'interoperabilitat.

Suport asíncron: Una addició notable és la biblioteca embedded-hal-async, que ofereix versions asíncrones dels trets. Aprofitant el suport de Rust 1.75 per a trets asíncrons a Rust estable, els desenvolupadors ara poden utilitzar funcionalitats asíncrones sense recórrer a assignacions de memòria dinàmica o despatx dinàmic. Aquesta millora facilita el desenvolupament i s'alinea amb les pràctiques modernes de Rust.

Compartició de Bus SPI: El tret SpiDevice introdueix suport per compartir un bus SPI entre múltiples dispositius, cadascun distingit pel seu pin CS individual. Això permet una comunicació fluida entre controladors i dispositius no relacionats al mateix bus, millorant la flexibilitat i la utilització de recursos.

Maneig d'errors: Els controladors genèrics es beneficien de capacitats avançades de maneig derrors, amb el requisit que els controladors implementin un tret «Error», que permet la inspecció i classificació derrors. Aquest enfocament estandarditzat garanteix un maneig robust derrors en diferents implementacions HAL.

Integració de embedded-IO: El projecte embedded-hal inclou les biblioteques embedded-io, que ofereixen trets per a fluxos d'E/S orientats a bytes. Amb els trets específics d'UART migrats a embedded-io, els desenvolupadors poden esperar un enfocament unificat i simplificat per a la comunicació sèrie.

L'alliberament d'embedded-hal 1.0 marca un avenç significatiu a l'ecosistema de Rust. Finalment per als que estiguin interessats a poder conèixer més sobre els desenvolupaments del projecte, han de saber que són distribuïts sota la llicència Apache 2.0.

font: https://blog.rust-embedded.org