Découverte d'un Bug??

Bonjour

En programmant un truc je me suis aperçu d'un bug, en effet j'ai réussi a récupéré plusieurs variable depuis une seule fonction et sa marche XD mais..... (il en faut bien un :P) sa perturbe les millis() de l'arduino! c'est c** car j'en est besoin aussi pour le même programme :~

Voici le code:

float A = 45 ;             
float B = 3 ; 
float Tableau[0];

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

void loop() {
  Serial.print(millis());Serial.println("ms");
  
  fonction(1);
  Serial.println(Tableau[0]);
  Serial.println(Tableau[1]);
  Serial.println(Tableau[2]);
  Serial.println(Tableau[3]);  
  Serial.println();
  
  delay(1000);
}

float fonction(float test) {
  Tableau[0]= A+B+test;
  Tableau[1]= A-B+test;
  Tableau[2]= (A-B)*test;
  Tableau[3]= A-(B*test);              
}

Du coup je suis un peu coincé...

Salut,

Y'a aucun bug, Tableau est un pointeur, donc Tableau[1], Tableau[2] etc ... pointe vers une adresse mémoire, donc une variable, donc rien de surprenant à ce que ça donne quelque chose.

L'erreur est là

float Tableau[0];

Tu déclares un tableau vide et tu y places 4 valeurs

  Tableau[0]= A+B+test;
  Tableau[1]= A-B+test;
  Tableau[2]= (A-B)*test;
  Tableau[3]= A-(B*test);

C'est pô bien... avr-gcc ne fait aucun contrôle de l'utilisation des index de tableau.

fdufnews:
L’erreur est là

float Tableau[0];

Tu déclares un tableau vide et tu y places 4 valeurs

  Tableau[0]= A+B+test;

Tableau[1]= A-B+test;
  Tableau[2]= (A-B)test;
  Tableau[3]= A-(B
test);



C'est pô bien...
avr-gcc ne fait aucun contrôle de l'utilisation des index de tableau.

désolé si je l’utilise mal, comment faire autrement? mais les soucis c’est les millis()…

pepe: Bonsoir

Ton tableau doit être déclaré avec la taille qui est utilisée :

float Tableau[4];

En écrivant au-delà du tableau, tu écrases de la mémoire qui peut être utilisée pour autre chose. Il n'est donc pas surprenant que tu observes un dysfonctionnement de l'Arduino.

En effet j'ai mis float Tableau[4]; et cela marche les mllis() ne change plus! donc si j'ai bien compris si on ne déclare pas sont tableau correctement les valeurs sont écrite un peu n'importe où dans la memoire...

Merci les gars

pas exactement n'importe ou, mais directement a la suite, si tu ecrit quelque chose comme int Vitesse[30] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int puissance[30] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Vitesse[31] =10;

tu auras probablement puissance[1]=10

le fait que millis ai été affecté signifie que la variable millis était stocké au moins en partie a cette endroit.

Ok
Merci bien pour l’explication, je comprend mieux.

Je m’améliore de jour en jour!