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 […]
Mot-clé - avr-gcc
samedi 22 septembre 2012
Environnement de construction pour Arduino Leonardo
samedi 22 septembre 2012.
SCons et les méthodes d'environnement
samedi 22 septembre 2012.
""" 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.
SCons et les variables de construction
samedi 22 septembre 2012.
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.
Construction de plusieurs projets
samedi 22 septembre 2012.
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.
mardi 24 juillet 2012
Les assertions avec Arduino
mardi 24 juillet 2012.
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.
mercredi 9 mai 2012
Construction d'une bibliothèque
mercredi 9 mai 2012.
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.
Bibliothèque digital_io
mercredi 9 mai 2012.
// 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);
Ouverture du dépôt idreammicro-avr
mercredi 9 mai 2012.
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 […]
jeudi 5 janvier 2012
FreeRTOS sur ATmega328
jeudi 5 janvier 2012.
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.
lundi 19 décembre 2011
avr-size et Ubuntu 10.04 LTS
lundi 19 décembre 2011.
À 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.
Arborescence d'une bibliothèque
lundi 19 décembre 2011.
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.
lundi 11 juillet 2011
Environnement de construction SCons pour AVR-GCC (2/2)
lundi 11 juillet 2011.
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.
jeudi 30 juin 2011
Environnement de construction SCons pour AVR-GCC (1/2)
jeudi 30 juin 2011.
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.