Table des matières

Stocker des données dans la mémoire programme

Les différentes mémoires

Il existe trois types de mémoires dans les microcontrôleurs utilisés dans les cartes Arduino. (Atméga 168 / 328 etc …)

La mémoire SRAM ne peut contenir que très peu de données 1Ko ou 2Ko selon le microcontrôleur. Si nous devons accéder à un tableau de grande dimension, nous serons vite limité. L'espace de stockage de la mémoire FLASH peut être utilisé, il faut cependant garder à l'esprit que ne seront stocké que des données non modifiables.

Pour forcer le compilateur à stocker le tableau dans l'espace programme, il faut utiliser le mot-clef PROGMEM lors de la déclaration de la donnée.

const uint8_t tableau[tailleTableau] PROGMEM = {0, 0, 0, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2};

Cet attribut est déclaré dans le fichier d'en-tête, <avr/pgmspace.h>, pour cela il faut utiliser la directive include

#include <avr/pgmspace.h>

Pour accéder à ces données, il existe une méthode, prgm_read_byte() :

byte valeur = pgm_read_byte(&tableau[compteur]);

Pour les entiers qui sont stockés sur deux octets il est nécessaire d'utiliser la méthode pgm_read_word.

Le paramètre passé à cette méthode est une adresse, d'où le caractère & avant le nom de la donnée.

Un exemple fonctionnel

Fichier

Liens externes

Description des mémoires de l'Arduino

Tutoriel GCC et l'attribut PROGMEM

Détail de pgmspace de la librairie AVR libc