Atmel AVR » Historique » Révision 17
Révision 16 (Patrice Nadeau, 2024-01-27 16:40) → Révision 17/23 (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.
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` : Un microcontrôleur AVR ne termine jamais cette fonction
1. Déclarer la fonction main avec 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 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
* [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)