Projet

Général

Profil

Atmel AVR » Historique » Révision 20

Révision 19 (Patrice Nadeau, 2024-01-27 16:43) → Révision 20/23 (Patrice Nadeau, 2024-01-27 16:44)

# 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. 
 1. 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. 
 1. Progmem : Pour mettre des variables en lecture seule dans la section FLASH au lieu de SRAM. 
     1. Inclue la librairie `avr/pgmspace.h` 
     1. Le nom de la variable DOIT être suivie de **_P** 
     1. Utiliser les macros de la librairie pour accéder à ces variables 
 1. Fonction `main` 
     1. Déclarer la fonction avec le type `void` et l’attribut `noreturn` 
     1. Utiliser une boucle sans fin `for (;;)` 
 1. Opérations atomiques (opérations ne devant pas être interrompus) 
     1. Inclure la librairie `util/atomic.h` 
     1. Insérer les instructions dans une section `ATOMIC_BLOCK` 
 6. Interruptions 
     1. TODO 

 ## Exemple 
 ```c 
 #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 Variable1_P PROGMEM = 42; 

 ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { 
     ... 
 } 


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

 /* main function definition */ 
 void main(void) { 
     ... 
     /* Boucle sans fin */ 
     for (;;) { 
     }; 
 }; 
 ``` 

 ## Justifications 
 * [Atmel AVR4027 : Tips and Tricks to Optimize Your C Code for 8-bit AVR Microcon-trollers](https://ww1.microchip.com/downloads/en/AppNotes/doc8453.pdf) 
 * [AVR035 : Efficient C Coding for AVR6](https://ww1.microchip.com/downloads/en/AppNotes/doc1497.pdf) 
 * [Vérification du modèle de microcontrôleur via l’option -m de gcc](https://github.com/embecosm/avr-gcc/blob/avr-gcc-mainline/gcc/config/avr/avr-mcus.def)