AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
Présentation

Copyright 2010-2017 (c), epsilonRT

osi.png

AvrIO est un projet Open Source sous CeCILL Free Software License Version 2.1 dont l'objectif est d'offrir une bibliothèque C pour les microcontrôleurs AVR d'Atmel.
AvrIO est développé en C et en assembleur.
Il utilise la chaîne de développement GNU GCC disponible sur la plupart des plateformes : Windows, Linux et autres Unix like, MacOS...

Pourquoi AvrIO ?

Lorsque l'on souhaite developper un projet utilisant un microcontrôleur, on se heurte rapidement à la problématique de choisir un système de prototypage. Il existe un grand nombre de cartes prototypes dont la plus connue dans le monde ATMEL est sans nul doute ARDUINO.

Certes cette solution est séduisante car elle fournit une solution "Tout-en-Un" à l'amateur soucieux d'arriver rapidement à une solution en DIY.

Le problème se complique lorsqu'on souhaite passer son projet à une étape un peu plus professionnelle, voir industrielle en developpant une carte spécifique.

On a alors 2 choix possibles:

  1. respecter l'architecture matérielle d'une carte ARDUINO et utiliser la librairie ARDUINO, ce qui est loin d'être souple, ou
  2. modifier la librairie ARDUINO pour l'adapter à la nouvelle carte, ce qui est loin d'être simple (car la librairie ARDUINO n'est pas prévue pour cela).

Si on ajoute à cela:

  1. un fort couplage entre l'IDE ARDUINO et sa librairie (on est plus ou moins obliger d'utiliser l'IDE prévue...)
  2. L'absence de prise en compte de l'utilisation d'un débogueur comme AVR Dragon ou JTAG ICE,

cela fait beaucoup dans un contexte professionnel...

AvrIO fournit une solution élégante permettant de gommer les différences entre le code mis au point lors de la phase de prototypage sur une carte du type d'ARDUINO (DVK, USBKEY, STK ...) et la phase de production sur la carte finale. Il reprend en cela les avantages de la conception orienté "Objet"

En clair, aucune ligne de code de l'application mise au point lors du prototypage n'est modifiée pour la solution finale.

Cela est rendu possible en effectuant une séparation stricte entre le code et la description matérielle. Cette description est réaliséé grâce à des fichiers d'entête dans le dossier board. Le développeur aura donc uniquement à créer un nouveau dossier board pour sa nouvelle carte en utilisant comme modèles les nombreux exemples du dossier board d'AvrIO.

AvrIO n'est pas lié à un IDE spécifique, on peut l'utiliser en ligne de commande (make, make program, make debug ...), avec Geany, AvrStudio 4, CodeLite, Eclipse...

Il suffit que l'IDE en question ai prévu l'intégration de projet utilisant un Makefile.

Pour ma part, j'ai une préférence pour CodeLite, qui est solution multiplateforme et puissante. CodeLite me permet sous Linux un débogage via GDB avec des fonctionnalités très proches d'AVR Studio 4 sous Windows... Mais il ne s'agit là que d'un avis personnel.

AvrIO est développé :

  • de façon modulaire, c'est à dire, qu'il est découpé en modules. Chaque module peut être validé ou non, configuré et adapté facilement grâce à des fichiers séparés du code source. Les dépendances entre modules sont limitées au stricte nécessaire.
  • de façon à réduire l'occupation mémoire que ce soit RAM ou FLASH permettant son utilisation sur les modèles les plus économiques de la famille AVR (tiny).

AvrIO complète la bibliothèque C standard avr-libc dans plusieurs domaines:

En plus des modules internes, AvrIO peut intègrer d'autres projets Open Source comme par exemple:

sans modification de leur licence.

AvrIO est pré-configurée pour un grand nombre de cartes cibles industrielles mais peut être adapté facilement à une carte cible personnelle :

Vous pouvez récupérer la toute dernière version de développement grâce à git :

$ git clone http://github.com/epsilonrt/avrio.git

Installation rapide

git clone http://github.com/epsilonrt/avrio.git
cd avrio
sudo make install

make set-profile
# Remove AVRIO_ROOT=... in /home/pascal/.profile
# AVRIO_ROOT=/home/pascal/src/avrio was added
#  in /home/pascal/.profile
# You must log out for this to take effect.