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.
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...
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é.
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 ...