Aller au contenu


Photo
- - - - -

La section de données dépasse l'espace disponible sur la carte

arduino

  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 marcus

marcus

    Nouveau membre

  • Membres
  • 30 messages

Posté 29 septembre 2021 - 09:13

Je suis en train de faire un petit jeu récemment et je veux utiliser Arduino uno pour le faire. Mon code se compile sans problème, mais lorsque je le télécharge, j'obtiens une erreur comme celle montrée dans l'image, est-ce parce que j'ai trop de variables définies ?
Est-ce que c'est parce que j'ai trop de variables définies ? Quelqu'un peut-il me dire comment le corriger ?
 
Arduino:1.8.12 (Windows 10), Development board: "Arduino Uno"

The project uses 6336 bytes, which occupies (19%) of the program storage space. The maximum is 32256 bytes. data section exceeds available space in board

Global variables used 3046 bytes, (148%) of dynamic memory, leaving -998 bytes for local variables. The maximum is 2048 bytes.
There is not enough memory; visit the following URL to follow the instructions to reduce memory usage.
http://www.arduino.cc/en/Guide/Troubleshooting#size
Error while compiling for development board Arduino Uno.

Turn on in File -> Preferences
"Show detailed output during compilation" option
This report will contain more information.

 



#2 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 952 messages
  • Gender:Male

Posté 29 septembre 2021 - 12:03

Bonjour,

en effet, tu as trop de variables définies, ou plus précisément, la somme de la taille de tes variables globales dépasse à elle seule la RAM (2048 octets) disponible.

A noter qu'il faut non seulement faire rentrer dans la RAM toutes tes variables globales, mais aussi laisser la place pour tes variables locales.

 

Si tu veux bien poster ton code ici, on pourra t'aider à réduire la RAM nécessaire.

Il y a plusieurs solutions :

- si tu définis des données qui ne changent jamais (constantes ou tableaux de constantes), tu peux soit utiliser "#define" (la "variable" constante est remplacée "en dur" par sa valeur avant la compilation) ou pour les tableaux de constantes les stocker dans la mémoire flash (si ton jeu nécessite de gros tableaux de constantes, par exemple une "carte", alors cette solution a elle seule suffit peut-être à résoudre ton problème

- utiliser la bonne taille de variable : par exemple "int" prends 2 octets : si tes nombres sont entre -128 et +127, tu peux utiliser int8_t à la place, qui ne prend qu'un octet ; de même, si tes nombres sont entre 0 et 255, tu peux utiliser uint8_t qui prend aussi un octet. Si jamais tu utilise beaucoup de booléens (0 ou 1), il est même possible de regrouper 8 booléens (qui de basent prennent 1 octet chacun) en un uint8_t qui prend un seul octet, mais c'est un poil plus compliqué, donc intéressant seulement si tu utilise un grand nombre d'octets.

- si jamais tu utilise des variables globales dont tu n'as besoin que dans un bout précis du code, c'est une bonne idée de les passer en variables locales, ainsi elles ne prennent la place que pendant leur durée de vie limitée : un même espace dans la RAM peut ainsi être utilisé successivement par différentes variables

- et d'autres optimisations spécifiques a ton code

 

Si tout ça ne suffit pas, ou si tu préfère investir de l'argent que du temps, tu peux passer à un autre micro-controleur qui a plus de RAM, par exemple une arduino Mega qui a 8ko de RAM au lieux des 2ko de l'Uno



#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 246 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 29 septembre 2021 - 02:03

Si tu utilises beaucoup de chaines de caractères dans ton code tu peux aussi éventuellement utiliser la macro F()

Exemple :  " Hello " => F("Hello ")
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#4 marcus

marcus

    Nouveau membre

  • Membres
  • 30 messages

Posté 22 octobre 2021 - 08:36

Si tu utilises beaucoup de chaines de caractères dans ton code tu peux aussi éventuellement utiliser la macro F()

Exemple :  " Hello " => F("Hello ")
 

Oui, vous avez raison, j'ai réussi en utilisant la méthode F().

Comme mon LCD a son propre jeu d'instructions, il aura beaucoup de chaînes très longues.



#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 246 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 22 octobre 2021 - 09:13

Content de voir que je ne perd pas la main dans l'identification rapide de certains problèmes et que cela ait pu t'aider :P


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users