Mot-clé - avr-gcc

Fil des billets - Fil des commentaires

samedi 22 septembre 2012

Environnement de construction pour Arduino Leonardo

ArduinoLeonardoFront.jpg

Si l'environnement de construction iDreamMicro prend en charge les cartes de développements Arduino Uno et Arduino Mega2560 depuis le début ou presque, la carte Arduino Leonardo avait été oubliée... La création d'un nouvel environnement de construction comble cette lacune. Celui-ci est très  […]

Lire la suite

SCons et les méthodes d'environnement

sconstruct.png
"""
Build project.
"""
def BuildProject(env, sources, target_name):    
    # Build program.
    env.Program(target = target_name + '.elf', source = sources)
    
AddMethod(Environment, BuildProject)

L'environnement de construction de la plateforme iDreamMicro permet de compiler en une seule fois plusieurs projets et plusieurs bibliothèques. Par conséquent, le principe de construction est le même d'un projet à l'autre ou d'une bibliothèque à l'autre.

Jusqu'ici on s'est contenté de dupliquer les scripts de construction. Mais cette situation ne peut perdurer, à plus forte raison quand SCons offre le nécessaire pour factoriser et éviter la duplication. La solution consiste à utiliser les méthodes d'environnement.

Lire la suite

SCons et les variables de construction

env_arduino_uno_py.png
env = Environment()
env.Append(NEW_VARIABLE = 'added')
print "NEW_VARIABLE =", env['NEW_VARIABLE']

Les précédents articles autour de SCons ont amené à concevoir un environnement de construction relativement complet, avec la construction de bibliothèques et de projets. Cet environnement utilise plusieurs fichiers SConstruct et SConscript qui doivent s'échanger des paramètres. Certains paramètres sont relatifs à un environnement en particulier. Par conséquent et afin d'éviter de les passer à tord et à travers, il semble judicieux d'en faire des variables de construction.

SCons permet justement d'ajouter des variables à un environnement de construction. Cet article a pour objectif de présenter cette fonctionnalité ainsi que son intégration dans les environnements de la plateforme iDreamMicro.

Lire la suite

Construction de plusieurs projets

project-sconstruct-diff.png

L'article précédent a abordé la construction d'un projet et des bibliothèques qu'il utilise. Dans le cas d'une plateforme telle qu'un réseau de capteurs, on peut vouloir construire plusieurs projets et leurs bibliothèques en une seule fois. Cet article propose une solution permettant de répondre à ce besoin.

Lire la suite

mardi 24 juillet 2012

Les assertions avec Arduino

assert.png
void foo(char* p_string)
{
    // Check the preconditions.
    assert(NULL != p_string);

    // ...
}

En informatique, une assertion est une expression qui doit être évaluée à vrai. Si le résultat de l'évaluation est faux, c'est qu'il y a un problème, une erreur qui ne doit pas se produire. Les assertions peuvent par exemple être utilisées pour s'assurer qu'une valeur est bien comprise entre deux bornes, qu'un pointeur n'est pas nul, etc...

Arduino utilise AVR-GCC et l'AVR Libc qui propose de prendre en charge les assertions via la bibliothèque assert définie dans le fichier d'entête assert.h.

Cet article propose de découvrir les assertions de l'AVR Libc puis de les mettre en œuvre sur Arduino.

Lire la suite

mercredi 9 mai 2012

Construction d'une bibliothèque

Après les deux précédents articles sur la configuration d'un environnement de construction SCons pour AVR-GCC, celui-ci propose de construire un logiciel recourant à des bibliothèques.

Comme dans l'article précédent, le projet servant de support fait basculer le niveau d'une sortie du microcontrôleur mais plutôt que de la piloter en direct, il propose de développer une bibliothèque digital_io réalisant cette tâche.

L'environnement de construction mis en place dans l'article précédent servira de base pour ce nouveau projet. Toutefois l'arborescence évolue et comporte désormais différents sous-dossiers afin de le structurer.

Lire la suite

Bibliothèque digital_io

    // Configure pin direction.
    DDRB |= (1 << PB5);

    // Set pin level.
    PORTB |= (1 << PB5);

Ces quelques lignes de code ne parleront sans doute qu'aux personnes connaissant les microcontrôleurs, voire même seulement à celles connaissant les microcontrôleurs AVR d'Atmel. En effet, elles configurent le PORTB5 d'un ATmega en sortie et le mettent au niveau logique haut.

Certes, c'est le meilleur moyen de réduire l'empreinte mémoire du logiciel sans recourir à l'assembleur. Mais c'est loin d'être le plus parlant. Sans oublier que ce code n'est pas portable. C'est à dire que le jour où on souhaitera troquer l'AVR pour un autre microcontrôleur tel qu'un PIC ou un MSP430, il sera nécessaire de revenir sur l'ensemble du logiciel.

Afin de remédier aux inconvénients cités ci-dessus, iDreamMicro propose dans cet article de découvrir la bibliothèque digital_io. Elle permet de piloter les ports d'entrée/sortie numériques des microcontrôleurs AVR d'Atmel :

  • configuration des ports d'entrée/sortie ;
  • lecture du niveau d'entrée ;
  • écriture du niveau de sortie.

La tout en offrant abstraction, portabilité et réutilisabilité. Les quelques lignes ci-dessous ne sont-elles pas plus parlantes ?

    // Declare pin.
    digital_io__pin_position_t output =
        DIGITAL_IO__PORT_B | DIGITAL_IO__PIN_5;

    // Configure pin direction.
    digital_io__configure_pin(output, DIGITAL_IO__DIRECTION__OUTPUT);

    // Set pin level.
    digital_io__set_pin_level(output, DIGITAL_IO__LEVEL__HIGH);

Lire la suite

Ouverture du dépôt idreammicro-avr

Un système de gestion de version permet de conserver l'ensemble des révisions d'un logiciel. iDreamMicro a choisi d'utiliser ce type de système, et plus particulièrement Subversion. iDreamMicro a ouvert un dépôt dédié à ses développements pour microcontrôleur AVR avec AVR-GCC. Celui-ci est  […]

Lire la suite

jeudi 5 janvier 2012

FreeRTOS sur ATmega328

FreeRTOS est un noyau de système d'exploitation temps réel faible empreinte pour microcontrôleur. Il est publié sous licence libre GNU General Public License (GPL).

FreeRTOS propose différents portages, notamment pour ATmega323, mais pas pour ATmega328. En effet, certains registres et vecteurs d'interruption relatifs au Timer 1 ont été renommés. Cet article propose d'y remédier de manière didactique, en réalisant le portage pas à pas. Ainsi la démarche pourra être reproduite pour tout autre microcontrôleur ATmega.

L'ATmega328 étant relativement proche de l'ATmega323, le portage de ce dernier servira de base.

La cible utilisée dans cet article est une carte Arduino Uno R2 embarquant un microcontrôleur ATmega328P.

Lire la suite

lundi 19 décembre 2011

avr-size et Ubuntu 10.04 LTS

À l'image de l'utilitaire size pour gcc, avr-size permet de connaître l'empreinte mémoire de programmes pour microcontrôleurs AVR compilés avec avr-gcc.

Ainsi avr-size propose deux options dédiées aux AVR :

  • L'option -C offre une vue de l'empreinte mémoire adaptée aux microcontrôleurs AVR, en distinguant la mémoire de programme (flash) et la mémoire de données (RAM).
  • L'option --mcu permet d'indiquer le type d'AVR et d'obtenir un taux d'occupation mémoire exprimé sous forme de pourcentage.

Malheureusement, ces options ne sont pas supportées par la version d'avr-size livrée avec la distribution Ubuntu 10.04 LTS (Lucid Lynx). Leur utilisation se solde par une erreur.

$ avr-size -C --mcu=atmega328p helloworld.elf
avr-size: invalid option -- 'C'
Usage: avr-size [option(s)] [file(s)]
 Displays the sizes of sections inside binary files
 If no input file(s) are specified, a.out is assumed
 The options are:
  -A|-B     --format={sysv|berkeley}  Select output style (default is berkeley)
  -o|-d|-x  --radix={8|10|16}         Display numbers in octal, decimal or hex
  -t        --totals                  Display the total sizes (Berkeley only)
            --common                  Display total size for *COM* syms
            --target=<bfdname>        Set the binary file format
            @<file>                   Read options from <file>
  -h        --help                    Display this information
  -v        --version                 Display the program's version

avr-size: supported targets: elf32-avr elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex

En effet, la version du paquet binutils-avr (2.20-2) livrée avec cette version de la distribution Ubuntu est une version non patchée de l'utilitaire size de gcc. Cet article propose une solution pour remédier à ce problème.

Lire la suite

Arborescence d'une bibliothèque

Par définition, une bibliothèque doit être réutilisable afin d'être intégrée au plus grand nombre de projets. Mais elle doit également être suffisamment indépendante pour permettre de l'évaluer et de la tester sans être parasité par un projet complet. C'est à dire qu'on doit pouvoir prendre uniquement le dossier de la bibliothèque.

Cet article présente l'arborescence définie par iDreamMicro afin de répondre à ces exigences.

Lire la suite

lundi 11 juillet 2011

Environnement de construction SCons pour AVR-GCC (2/2)

Ce second article sur la configuration d'un environnement de construction SCons pour AVR-GCC introduit la notion de SConscript. Le logiciel de sortie de ce projet est exactement le même que celui de l'article précédent, seule la méthode change.

Désormais, le SConstruct est éclaté dans différents scripts, chacun ayant un rôle précis dans la construction du logiciel :

  • configuration de l'environnement de construction ;
  • adaptation de l'environnement de construction à la cible ;
  • construction du projet.

Pour démontrer que cette méthode est bien plus que de la cosmétique, cet article propose également de construire le logiciel pour deux cibles distinctes.

Lire la suite

jeudi 30 juin 2011

Environnement de construction SCons pour AVR-GCC (1/2)

Cet article présente la configuration d'un environnement de construction SCons minimal pour AVR-GCC.

Afin d'aller à l'essentiel, la configuration de l'environnement et la construction du logiciel se font dans un même fichier SConstruct. Même si ce n'est pas la solution la plus élégante, elle demeure la plus simple. Dans le même souci de simplicité, le projet servant d'exemple ne comporte qu'un seul fichier source et n'a recours à aucune bibliothèque.

Lire la suite