Ci dessous un tout petit programme qui devait me servir à définir des temps d’exécution...
La boucle "for" n'introduit aucune différence dans l'affichage qui s’incrémente de 500ms à chaque boucle
Quelque soit le nombre de boucle for le résultat est toujours le même !!!
il faut croire que mon Arduino Nano est un processeur quantique !!
Quelqu'un aurait il une explication ?
unsigned long Temp;
unsigned long Data;
void setup() {
Serial.begin(9600);
Serial.println("debut");
}
void loop() {
Temp=millis();
for(unsigned long i=0 ; i <= 3000000000 ; i++){ // j'ai mis le paquet
Data= Data+1;
}
Serial.println(Temp);
delay(500);
}
for(unsigned long i=0 ; i <= 3000000000 ; i++){ // j'ai mis le paquet
Data= Data+1;
}
}
L'optimiseur voit que la variable Data ne sert à rien. [n'a aucun rôle fonctionnel]
ET il supprime complétement la boucle for.
Essayez de désassembler le code.
Ou mettez des instructions no-op dans la boucle.
Chez moi ça fonctionne et dépend du nombre de boucles. Ça dépend peut être de la version.
Essaies de déclarer Data comme volatile pour éviter l'optimisation.
Chez moi ça fonctionne et dépend du nombre de boucles. Ça dépend peut être de la version.
Essaies de déclarer Data comme volatile pour éviter l'optimisation.
"Chez moi ça fonctionne"
Ahhhh?
Unix ou windows ?
Quelle version ( non trafiquée) de l'IDE ?
Bonsoir
Merci pour toutes vos réponses
J'ai tente un nbr de boucles dépassant la capacité d'un "unsigned long" dans ce cas la la boucle ne se fait pas
Je suis sous Windoqs10 avec un ARDUINO Nano chinois.....
Je souhaite connaitre les temps d’exécution car en regardant les programme pour le HX711 je me suis rendu compte que ces programmes ne tenaient pas compte du datasheet du Hx711 du point de vu chronologie.....à moins que je me sois trompé
bidouilleelec:
Envoyez le code et le code désassemblé.
Le code est le code de ATOS_VQ, mais j'ai supprimé deux zéros car je ne voulais pas attendre jusqu'à demain
unsigned long Temp;
unsigned long Data;
void setup() {
Serial.begin(115200);
Serial.println("debut");
}
void loop() {
Temp = millis();
for (unsigned long i = 0 ; i <= 30000000/*00*/ ; i++) { // j'ai mis le paquet
Data = Data + 1;
}
Serial.println(Temp);
delay(500);
}
Quelle que soit la valeur que tu mets dans la boucle ? C'est la durée du delay...
C'est peut-être que ça pédale trop vite pour changer quoi que ce soit ?
Ceci dit, j'avais déjà remarqué un truc comme ça avec un ESP32, mais je pensais qu'il était trop rapide pour que mes boucles soient efficaces. Et pourtant j'avais mis le paquet ; trois boucles imbriquées pour multiplier les durées... Pas vu de différence.
lesept:
Quelle que soit la valeur que tu mets dans la boucle ? C'est la durée du delay...
C'est peut-être que ça pédale trop vite pour changer quoi que ce soit ?
Le compilateur peut optimiser en supprimant des instruction, mais dans mon essai, avec ma version, on voit bien dans le désassemblage que la boucle est effectivement exécutée.
kamill:
Le compilateur peut optimiser en supprimant des instruction, mais dans mon essai, avec ma version, on voit bien dans le désassemblage que la boucle est effectivement exécutée.