Probleme de RAM avec struct

Bonjour a tous.

Je rencontre un probleme de RAM avec mon programme et je n'arrive pas a comprendre ce que je fait de mal.

Voici mon extrait de mon code:

#define NUM_STAR 120

CRGB leds[NUM_LEDS];

struct Spark {
  byte position;
  int life;
  int timeStep;
  byte strobeFreq;
  int transition;
  byte color1;
  byte color2;
};

Spark sparks[NUM_STAR];

void setup() {
  //Serial.begin(9600);
  initStar();
}

void loop() {
  exploseStar();
  pause(500);
}

void initStar() {
  for (byte i = 0; i < NUM_STAR; i++) {
    sparks[i].position = i;
    sparks[i].life = 100;
    sparks[i].timeStep = 50;
    sparks[i].strobeFreq = 2;
    sparks[i].transition = 50;
    sparks[i].color1 = 255;
    sparks[i].color2 = 100;
  }
}

void exploseStar() {
  int tempo = 50;
  int test = NUM_STAR;
    for (byte i = 0; i < NUM_STAR; i++) {
      **sparks[i].life -= sparks[i].timeStep;**
     delay(1000);
   }
}saisissez ou collez du code ici

Des que je fais une action (en gras dans le code), la memoire monte en fleche
Sans le code en gras: 30% de RAM occupé
Avec le code en gras: 90% de RAM occupé

Avez vous une idée de mon erreur ??
Par avance merci de votre retour.

ChNI

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

comment savez vous que la mémoire monte en flèche ?

si vous êtes sur UNO votre structure occupera 10 octets au minimum donc vos 120 étoiles vont occuper 1200 octets sur les 2048 de la carte.. si c'est ce que vous dit le compilateur c'est normal.

en fait comme le code que vous avez posté ne fait rien des données l'optimiser vire sans doute tout le code jusqu'à un moment où l'optimiser ne se pose plus trop la question et va conserver le code et donc le tableau de structure va occuper la mémoire


petite question car nous essayons de comprendre pourquoi les nouveaux venus ne postent pas au bon endroit :

➜ pourquoi n'avez vous pas posté dans le forum francophone directement et avez choisi de poster en français dans la catégorie anglaise "Installation & Troubleshooting" ?

merci de répondre avec honnêteté, même si c'est parce que vous avez eu la flemme de lire les consignes...

Bonjour J-M-L

Merci pour le retour.
C'est le compilateur qui me donne cette reponse.
J'ai revu la structure de mon programme, j'ai mis la variable Spark sparks[NUM_STAR]; non plus en globale mais en local dans une methode, cela a fait chuté la quantité de memoire utilisé.

ChNI

Bonjour,

Pour être franc, je n'ai pas lu les consignes.

ChNI

Cela a fait chuter la quantité de mémoire globale mais lorsque tu appelleras la méthode en question tu risques d'avoir un débordement.

Oui, ce qui fait que la variable est stockée sur la pile (STACK).
Auparavant elle était stockée dans BSS.
Plus tu alloues des quantité de données importante sur la pile, plus la pile risque de ravager des données dans BSS, tes variables globales, et dans ce cas le compilateur ne préviendra pas, donc patatras ...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.