WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


avr-gcc

Ceci est une ancienne révision du document !


AVR GCC - AVR-LIBC

Commentaire

//Commentaire
/*Commentaire*/

Sur plusieurs lignes :

/*
Commentaire
sur
plusieures 
lignes
*/

Structure d'un programme

#include <avr/io.h> 	// Librairie utilisée par le programme
 
int main (void) 	// Fonction principale
{
 
	DDRB = 0xFF; 	//Met le port B en sortie
	PORTB = 0xFF; 	//Met le port B à l'état haut
 
	return 1;	//Valeur de retour de la fonction
}

Entrées Sorties

DDRx Impose la direction des ports.
DDRA=0xF0 ; les bits 0 à 3 du portA sont configurés en entrée et de 4 à 7 en sortie.

PORTx Impose l’état logique des bits sur le port.
PORTA=0xF0 ; les bits 0 à 3 du portA passent à l’état bas et de 4 à 7 à l’état haut.

PINx récupère l’état du port x.
z=PINA La valeur du port A est mise dans la variable z.

Voir l'exemple : Utiliser les entrées sorties

Temporisation

La librairie delay permet de créer des tempos facilement grâce à une boucle programme.
Avantage : Très facile à utiliser
Inconvénient : Pendant la tempo, le micro est bloqué dans sa boucle est ne peut rien faire d’autre.

A Rajouter dans le programme pour utiliser les fonctions :

#define F_CPU 1000000UL // 1 MHz
#include <util/delay.h>
void _delay_us (double __us) //double __us détermine le nombre de microsecondes 
void _delay_ms (double __ms) //double __ms détermine le nombre de millisecondes 

Voir l'exemple : Temporisation avec delay.h (Chenillard)

Les types de variables

Type courant Taille en bits Valeur
char 8 -128 à 127
unsigned char 8 0 à 255
signed char 8 -128 à 127
int 16 -32768 à 32767
unsigned int 16 0 à 65535
long int 32 -2147483648 à 2147483647
unsigned long int 32 0 à 4294967295
float 32 3.402e-38 à 3.402e38
double 32 1.7e-308 à 1.7e308

stdint.h

L'intérêt de cette librairie est de pouvoir indiquer clairement la taille de la variable que l'on souhaite.

Librairie utilisée

#include <stdint.h>
Variable stdint équivalent taille en bit
int8_t signed char 8
uint8_t unsigned char 8
int16_t signed int 16
uint16_t unsigned int 16
int32_t signed long int 32
uint32_t unsigned long int 32
int64_t signed long long int 64
uint64_t unsigned long long int 64

Quand vous utilisez une variable qui aura au moins une taille de x_bit vous pouvez déclarer votre variable en :

  • int_leastx_bit_t : Si vous souhaitez optimiser la taille prise par la variable. Utilisé pour les structures de données
  • int_fastx_bit_t : Si vous souhaitez optimiser la vitesse. Utilisé pour les variables locales

Les constantes

Déclaration

#define PI 3.1415926

Types

Décimales: pas de préfixe ex: 255

Hexadécimales: préfixe 0x ex: 0x0F

Entieres non-signées : suffixe U ex:1000U

Entieres longues : suffixe L ex: 99L

Entieres non-signées et longues : suffixe UL ex: 99UL

Caractères : entre apostrophes (') ex: 'a'

EEPROM

Librairie utilisée

#include <avr/eeprom.h>

Fonctions

eeprom_is_ready()

Retourne 1 si l'EEPROM est prête sinon 0

Il est conseillé de désactiver les interruptions pendant les phases de lecture et d'écriture.

uint8_t eeprom_read_byte (const uint8_t * addr)

Lit un octet (8bits) à l'adresse addr

void eeprom_write_byte (uint8_t * addr, uint8_t value)

Ecrit un octet (8bits) value à l'adresse addr

uint16_t eeprom_read_word (const uint16_t * addr)

Lit un mot (16bits) à l'adresse addr

void eeprom_write_word (uint16_t * addr, uint16_t value)

Ecrit un mot (16bits) value à l'adresse addr

Voir l'exemple : Utiliser l'EEPROM

Timer

USART

Interruption

Librairie utilisée

#include <avr/interrupt.h>

Fonctions

La fonction ISR() est executé lors de l'activation de l'interruption _vect_

ISR(_vect_)
{
	// Votre code à exécuter lors de l'interruption
}

_vect_ doit être remplacé par le nom attribué au vecteur d'interruption qui vous interresse.

Les interruptions (bit I de SREG) sont désactivées lors de l'appel de la fonction ISR puis réactivés une fois la fonction exécutée.

Pour ceux qui utilisaient une ancienne version d'AVRlibC, SIGNAL et INTERRUPT sont maintenant remplacés par ISR et ne doivent plus être utilisés.

Liste des vecteurs d'interruption

Voir Manuel d'AVR-LIBC v1.4.4, chapitre <avr/interrupt.h>: Interrupts page 127

Interruption externe

Optimisez votre programme

Code

Variables

  • Utilisez un type de variable approprié à son contenu. Ayez, par exemple, le reflexe registre 8bits → variable sur 8bit → type unsigned char ou uint8_t
  • Utilisez le plus souvent possible des variables non signées. Les multiplications et divisions par des puissances de 2 se font par un simple décalage à gauche ou à droite.
  • N'initialisez vos variables que si elles sont différentes de 0.
  • Déclarez vos variables globales avec le prefix static

Compilation

  • Utilisez la directive de compilation -Os qui permettra de générer un code plus petit et donc plus rapide.

Documentation indispensable

avr-gcc.1416563792.txt.gz · Dernière modification: 2017/12/06 16:10 (modification externe)