prof. Jacques Lepot
AVR, programmation GCC
GCC
La suite GCC (Gnu C compiler) est l'ensemble des outils nécessaires au développement de programme en C et C++ avec linux
Ces outils peuvent également être utilisés sur Windows grâce à un émulateur linux (Cygwin) .
Les différents programmes (compilateur, linker ) fonctionnent en ligne de commande, la syntaxe de ses commandes est assez complexe et les options très nombreuses. Il existe des scripts qui automatisent toutes les commandes nécessaires pour produire un fichier executable à partir d'un fichier source et de librairies. Le plus important est le makefile associé à la commande make.
La force de cette suite est qu'elle n'est pas associée à un processeur particulier mais peut être configurée pour n'importe quel microprocesseur ou microcontrôleur. La complexité, le nombre importants de fichier et de commandes, sont le prix à payer pour cette souplesse.

Heureusement, il existe des versions spécifiques "pré-configurées" qui simplifient le travail d'installation et l'utilisation.

WinAVR
Pour la famille AVR, la version de GCC plus populaire est   WinAVR,

Téléchargez à partir de sourceforge et installez, je conseille de conserver le répertoire proposé.
Acceptez également l'installation de "programmer notepad", c'est un éditeur de texte pour le code source avec quelques fonctions d'assistance à la compilation.

Une fois l'opération terminée, voici ce que vous avez installé (une partie !) :

  1. GNU Binutils, Binary utilities for AVR ( assembler, linker, etc.).
  2. GNU Compiler Collection (GCC), C language and C++ language compiler for AVR.
  3. avr-libc, C Standard Library for AVR.
  4. AVRDUDE, an open source programmer software.
  5. GNU Debugger (GDB) / Insight GDB, a command-line debugger. Insight is GDB with a GUI
  6. SimulAVR is used in conjunction with GDB to provide AVR simulation.
  7. MFile, an automatic makefile generator for AVR GCC.
  8. Programmers Notepad, devel. programming editor and IDE.
  9. LibUSB and device drivers, USB library that is linked into AVRDUDE and AVaRICE.
  10. Cygwin DLLs
  11. Many native Win32 GNU programs and utilities including make and bash.
  12. Makefile Template pour utiliser dans vosprojets.
  13. Documentation.

Voila, tous ces outils sont à vous, il n'y a plus qu'à apprendre à les utiliser !


PREMIER PROGRAMME en C, la led qui clignote

Lancez programmer notepad (pn.exe), il est dans le répertoire d'installation, sous répertoire pn.
Dans la fenêtre principale, copiez le programme suivant:

/*
    Programme de chenillard  illustrant  l'utilisation des ports d'I/O.
    Cible : ATMega8
    Quartz : 8MHz
    Compilateur : avr-gcc (WInAVR)
*/

#include  <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
//-------------------------------------------------------------------------------
//  Initialisation des ports
void port_init(void) {
    // configuration du port D
    
     DDRD  = 0xFF ; // - toutes les I/O en sortie
     PORTD = 0x00 ; // - toutes les LEDs éteintes
}

//  Génération d'un délai 
void Delay(void) {
    unsigned char a, b;
    int i ;

    // à la méthode bourrin : on boucle le nombre de fois qui va bien
    for (i=0;i<5;i++) 
        for (a = 1; a; a++)
            for (b = 1; b; b++)
                ;
}

//  Affichage une LED  Paramètres:  i = numéro de la LED (0..7)
void LED_On(int i)    {
    // on met à 1 le bit correspondant à la sortie à passer à l"état haut
	// tous les autres à 0.
    PORTD = (1 << i); // comprenez vous cette instruction ?
    Delay(); // et on attend un peu
}

//-------------------------------------------------------------------------------
int main(void) {
    int i;
    
    port_init(); 

    while (1) {
        // défilement avant
        for (i = 0; i < 8; i++)
            LED_On(i);
            
        // défilement arrière
        for (i = 8; i > 0; i--)
            LED_On(i);
           
        // et un flash général pour finir
        for (i=0; i<4; i++) {
            PORTD = 0xff ;
            Delay() ;
            PORTD = 0 ;
            Delay() ;
        }
    }
}

Avec la commande File>Save As , sauvez ce programme dans un répertoire dans winavr (projets par exemple)
nommez le "demo1.c" A ce moment (l'éditeur à compris que c'était du C) la syntaxe se colorie.

Pour compiler, il vous faut un fichier Makefile. Vous pouvez prendre celui situé dans le répertoire samples de winavr.
Mais il faut le modifier (type de uC, nom du fichier source .c)

Le fichier Makefile doit être sauvé dans le même répertoire que votre code source (demo1.c). Dans ce répertoire vous avez maintenant 2 fichiers, demo1.c et makefile.

Dans pn, ouvrez la commande Tools et choisissez [Winavr]Make All, une fenêtre "output" apparait en bas, elle affiche le résultat de la compilation.
si les 2 dernières lignes sont :

> Process Exit Code: 0
> Time Taken: 00:08

Alors tout est bon, avec l'explorateur, retournez dans le répertoire de votre projet, vous avez maintenant 10 fichiers et un nouveau sous-répertoire. Le plus important est d'y trouver demo1.hex qui est votre exécutable prêt à flasher dans le uC.

Retournez dans la commande Tools et faites [Winavr]Make Clean, regardez dans le répertoire ... nettoyé !

Si l' Exit Code est différent de 0, alors il y à une ou des erreurs, il faut remonter en arrière dans la fenêtre output pour avoir des indications. Cela peut venir d'erreurs en C, de librairies manquantes ou d'erreurs dans le Makefile.

Modifier le Makefile, ouvrez le fichier Makefile dans un nouvel onglet de PN. Les lignes à modifier sont principalement :

MCU = atmega8, changer ceci pour un autre processeur par ex: atmega88 ou atmega168

F_CPU = 8000000, à changer si la fréquence de la clock n'est pas 8Mhz

TARGET = demo1, ici vous devez mettre le nom du fichier source (sans l'extension .c)

Documentation de la librairie avr-libc (en anglais)