avr-size et Ubuntu 10.04 LTS
Par Julien Le Sech,
lundi 19 décembre 2011.
Lien permanent
À 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.
Correction
La correction consiste à remplacer le paquet défectueux binutils-avr 2.20-2 par le paquet binutils-avr 2.20.1-2, version plus récente dûment corrigée.
La version du paquet à installer dépend de l'architecture du système. Cet article se limitera aux versions 32 et 64 bits d'Ubuntu.
Version 32 bits
Téléchargement
$ wget http://archive.ubuntu.com/ubuntu/pool/universe/b/binutils-avr/binutils-avr_2.20.1-2_i386.deb
Installation
$ sudo dpkg -i binutils-avr_2.20.1-2_i386.deb
Version 64 bits
Téléchargement
$ wget http://archive.ubuntu.com/ubuntu/pool/universe/b/binutils-avr/binutils-avr_2.20.1-2_amd64.deb
Installation
$ sudo dpkg -i binutils-avr_2.20.1-2_amd64.deb
Vérification
En guise de conclusion, on vérifiera que la correction exposée dans cette article fonctionne. On tente à nouveau d'utiliser avr-size avec les options -C et --mcu.
$ avr-size -C --mcu=atmega328p helloworld.elf
AVR Memory Usage
----------------
Device: atmega328p
Program: 334 bytes (0.1% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
It works!