Projet

Général

Profil

Actions

Atmel AVR

Particularités pour les microcontrôleurs 8 bits AVR d’Atmel.

Règles

  1. Macros définis dans le fichier config.h
    1. F_CPU : La fréquence utilisée par l’horloge (interne ou externe) du microcontrôleur, en Hz

      Les « fuses » doivent correspondent à la bonne source de l’horloge.

  2. De nouveau type d’entier sont fournis avec la librairie stdint.h. L’utilisation de ces types DOIT être utilisé afin d’exprimer le nombre de bit d’un objet.
  3. Progmem : Pour mettre des variables en lecture seule dans la section FLASH au lieu de SRAM.
    1. Inclue la librairie avr/pgmspace.h
    2. Le nom de la variable DOIT être suivie de _P
    3. Utiliser les macros de la librairie pour accéder à ces variables
  4. Fonction main
    > * AVR035 : Efficient C Coding for AVR6
    > https://gcc.gnu.org/onlinedocs/gcc/AVR-Function-Attributes.html
    • Déclarer la fonction avec le type void et l’attribut OS_main
    • Utiliser une boucle sans fin for (;;)
  5. Opérations atomiques (opérations ne devant pas être interrompus)
    1. Inclure la librairie util/atomic.h
    2. Insérer les instructions dans une section ATOMIC_BLOCK
  6. Interruptions
    1. TODO

Exemple

#if !defined (__AVR_ATmega48__) || (__AVR_ATmega48P__)
    #warning "Cette librairie n'as pas été testée sur cette famille de microcontrôleur."
#endif

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/atomic.h>

/** @brief Variable en FLASH */
char my_string[] PROGMEM = "POWER";

/** 
 * @brief La fonction principale
*/
void main(void) __attribute__ ((OS_main));

void main(void)
{
    ...
    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
        /* Initialisations ne devant pas être interrompues */
        ...
    }
    /* Boucle sans fin */
    for (;;)
    {
    };
};

Justifications

Mis à jour par Patrice Nadeau il y a un jour · 31 révisions