Main

Référence : Langage Arduino : [ Mini | Standard | Etendue | Maxi ] Librairies : [ Vue d'ensemble | Synthèse ] Infos : [ Comparaison | Changements ]

Les mémoires de la carte Arduino.


Il y a trois types de mémoires du microcontrôleur (ATmega 1268/328) utilisées sur les cartes Arduino :

  • La mémoire FLASH (mémoire programme) est la mémoire dans laquelle le programme transféré dans la carte Arduino est stocké.
  • La mémoire SRAM ( mémoire statique à accès aléatoire ou mémoire vive) est la mémoire où le programme créé et manipule les variables quand il s'exécute.
  • EEPROM est la mémoire que le programmeur peut utiliser pour stocker des données de long-terme (non-volatiles).

La mémoire FLASH (c'est la même qui est utilisée pour votre appareil photo numérique) et l'EEPROM sont des mémoires dites non-volatiles, c'est à dire que l'information n'est pas effacées lorsque la carte est mise hors tension. La mémoire SRAM est volatile et sera effacée lorsque la carte est mise hors tension.

Voici la taille des mémoires disponibles pour les différents microcontrôleurs utilisés avec les cartes Arduino :

Type de MémoireATmega 168ATmega 328ATmega 1280ATmega 2560
Flash16K octets32K octets128K octets256K octets
SRAM1024 Octets2048 octets8K octets8K octets
EEPROM512 Octets1024 octets4K octets4K octets

Pour toutes les cartes Arduino, 2 K de la mémoire FLASH sont utilisées pour le bootloader résident.

Noter qu'il n'y a pas beaucoup de SRAM disponible. Il est d'ailleurs très facile de l'utiliser complètement, en utilisant par exemple plusieurs chaînes de caractère dans votre programme, ce qui n'est pas sans poser de problèmes. Par exemple, une déclaration telle que :

char message[] = "I support the Cape Wind project.";

va utiliser 32 octets de la SRAM (chaque caractère utilisé un octet). Cela ne paraît pas comme çà, mais cela n'est pas long d'atteindre les 1024 octets, surtout si vous avez de larges portions de texte à envoyer pour affichage, ou une table de données à consulter, par exemple.

Si vous dépassez la taille limite de la SRAM, votre programme va probablement se comporter de façon inattendue; le transfert du programme se passera bien, mais ne fonctionnera pas ou s'exécutera de façon étrange. Pour vérifier si c'est cela qui arrive, vous pouvez essayez de mettre en commentaire ou de raccourcir les chaînes de caractères ou les autres structures de données de votre programme (sans modifier le code cependant). Si cela fonctionne alors normalement, cela veut dire que vous avez dépassé les limites de la SRAM. Il y a plusieurs choses que vous pouvez faire pour résoudre ce problème :

  • Si votre programme communique avec un programme fonctionnant sur un ordinateur (portable ou de bureau), vous pouvez essayer de déplacer les données ou les calculs sur l'ordinateur, réduisant ainsi la taille du programme Arduino.
  • Si vous avez des tables de données ou d'autres grands tableaux, utiliser le plus petit type de donnée nécessaire pour stocker les valeurs dont vous avez besoin; par exemple, un int utilise 2 octets, tandis qu'un byte utilise uniquement un octet (mais peut stocker une fourchette de valeurs réduite).
  • Si vous n'avez pas besoin de modifier les chaînes ou les caractères tant que votre programme s'exécute, vous pouvez les stocker dans la mémoire FLASH (mémoire programme) au lieu de la mémoire SRAM; pour faire cela, utiliser le mot-clé PROGMEM

Voir également

Commentaires utilisateurs

Voir également ici : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1237998272 et ici : http://arduiniana.org/libraries/flash/

  • Un problème majeur que l'on va rencontrer avec les chaînes de caractères, c'est l'utilisation de la RAM qui va rapidement saturer (2K pour une UNO contre 32K de mémoire programme) et donner des comportements inattendus. Pour contourner le problème :

Page d'accueil de la référence Arduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées sur le Forum Arduino ou à l'adresse suivante : support_at_mon-club-elec_point_fr

Le texte original de la référence Arduino est sous licence Creative Commons Attribution-ShareAlike 3.0 . Les exemples de code dans la référence sont dans le domaine public.

La présente traduction française commentée a été réalisée par Xavier HINAULT (2010-2012) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.

Traduction de la page originale : http://arduino.cc/en/Tutorial/Memory