HWA est un outil d'abstraction du matériel pour la programmation de microcontrôleurs en C (ou en assembleur).
Ce n'est pas une bibliothèque mais un ensemble de macros qui permettent d'écrire un code plus porté vers la description du résultat attendu que sur les valeurs à écrire dans les registres.
Une première version avait été sortie (un peu prématurément) il y a environ trois ans. HWA a depuis été entièrement réécrit pour proposer des instructions génériques acceptant des listes d'arguments de longueurs variables. Le code écrit n'en devient que plus lisible et plus concis. Exemple :
/* Configure le compteur 0 pour compter à la fréquence système
* en boucle de 0 jusqu'à CMAX (stockée dans l'unité de comparaison
* compare0) et déclencher une IRQ au débordement
*/
hwa_config( hw_counter0,
clock, syshz,
countmode, loop_up,
bottom, 0,
top, compare0,
overflow, at_top,
);
hwa_write( hw_sub(hw_counter0, compare0), CMAX );
hwa_turn_irq( hw_counter0, overflow, on );
En ce moment, seuls les ATtiny44 et ATtiny84 sont supportés (presque totalement). Devraient arriver sous peu les ATtiny{25,45,85} et ATmega{88,168,328} qui ont déjà été testés mais doivent être réécrits. Ensuite, ce sera le tour des STM32 pour lesquels HWA a été conçu à l'origine.
Un début de documentation et un ensemble d'exemples sont fournis.
S'il fallait faire une comparaison avec Arduino, que j'ai très peu testé mais qui est très connu, je dirais que HWA a au moins l'avantage de produire un code qui ne souffre pas de pénalités en termes d'occupation mémoire ni, ce qui est lié, de vitesse d'exécution. En revanche le temps de compilation me semble sensiblement plus long. Cela étant très probablement dû au travail effectué par le préprocesseur puis par les mécanismes d'optimisation du code.
HWA est publié sur Github
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.