Projet

Général

Profil

Actions

Atmel AVR » Historique » Révision 18

« Précédent | Révision 18/23 (diff) | Suivant »
Patrice Nadeau, 2024-01-27 16:42


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
    1. Déclarer la fonction avec le type void et l’attribut noreturn
    2. 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

#ifndef defined (__AVR_ATmega48__) || (__AVR_ATmega48P__) || \
	(__AVR_ATmega88P__) || defined (__AVR_ATmega88__) || \
	(__AVR_ATmega168__) || defined (__AVR_ATmega168P__) || \
	(__AVR_ATmega328__) || defined (__AVR_ATmega328P__)
#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 */
const int Variable1_P PROGMEM = 42;

ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
    ...
}


/** 
 * @brief Never ending loop
*/
void main(void) __attribute__((noreturn));

/* main function definition */
void main(void) {
    ...
    /* never return */
    for (;;) {
    };
};

Justifications

Mis à jour par Patrice Nadeau il y a 11 mois · 18 révisions