Fonction millis() ,boucle "for"

Bonjour à tous

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);
}

Bonsoir,

Avec 3000000000ul, ça donne quoi ?

Bonsoir Atos

ATOS_VQ: Bonjour à tous

La boucle "for" n'introduit aucune différence dans l'affichage qui s’incrémente de 500ms à chaque boucle

unsigned long Temp;
unsigned long Data;

void setup() { Serial.begin(9600); Serial.println("debut"); }

void loop() {

     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.

Cordialement, bidouilleelec

Bonjour,

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.

Bonsoir kamill

kamill: Bonjour,

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 ?

Cordialement, bidouilleelec

Version 1.8.3 Windows 7 Carte UNO

kamill: Version 1.8.3 Windows 7 Carte UNO

Envoyez le code et le code désassemblé.

Je n'ai pas la 1.8.3

Je n’essaierais pas "" déclarer Data comme volatile pour éviter l'optimisation "".

Mais on dérive.

Cordialement, Bidouilleelec

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é

Donc en résume le mystère demeure

ATOS_VQ: Bonsoir Merci pour toutes vos réponses

Donc en résume le mystère demeure

Non : aucun mystère.

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);
}

Début désassemblage de la loop

void loop() {

 Temp = millis();
5bc: 20 93 29 01 sts 0x0129, r18 ; 0x800129 
5c0: 30 93 2a 01 sts 0x012A, r19 ; 0x80012a 
5c4: 40 93 2b 01 sts 0x012B, r20 ; 0x80012b 
5c8: 50 93 2c 01 sts 0x012C, r21 ; 0x80012c 
5cc: 80 91 25 01 lds r24, 0x0125 ; 0x800125 
5d0: 90 91 26 01 lds r25, 0x0126 ; 0x800126 
5d4: a0 91 27 01 lds r26, 0x0127 ; 0x800127 
5d8: b0 91 28 01 lds r27, 0x0128 ; 0x800128 
5dc: 61 e8       ldi r22, 0x81 ; 129
5de: c6 2e       mov r12, r22
5e0: 63 ec       ldi r22, 0xC3 ; 195
5e2: d6 2e       mov r13, r22
5e4: 69 ec       ldi r22, 0xC9 ; 201
5e6: e6 2e       mov r14, r22
5e8: ff 24       eor r15, r15
5ea: f3 94       inc r15
5ec: 61 e0       ldi r22, 0x01 ; 1
5ee: c6 1a       sub r12, r22
5f0: d1 08       sbc r13, r1
5f2: e1 08       sbc r14, r1
5f4: f1 08       sbc r15, r1

 for (unsigned long i = 0 ; i <= 30000000/*00*/ ; i++) { // j'ai mis le paquet
5f6: d1 f7       brne .-12     ; 0x5ec 
5f8: 8f 57       subi r24, 0x7F ; 127
5fa: 9c 43       sbci r25, 0x3C ; 60
5fc: a6 43       sbci r26, 0x36 ; 54
5fe: be 4f       sbci r27, 0xFE ; 254
600: 80 93 25 01 sts 0x0125, r24 ; 0x800125 
604: 90 93 26 01 sts 0x0126, r25 ; 0x800126 
608: a0 93 27 01 sts 0x0127, r26 ; 0x800127 
60c: b0 93 28 01 sts 0x0128, r27 ; 0x800128 

""Le code est le code de ATOS_VQ "" !!! Sous 1.8.3 ???

Version du compilateur? De l'optimiseur?

@kamill @bidouillelec Pouvez vous juste fournir les sorties console avec diverses valeurs de boucles ?

lesept: @kamill @bidouillelec Pouvez vous juste fournir les sorties console avec diverses valeurs de boucles ?

500ms

bidouilleelec: 500ms

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.

Pour 30000000

debut 0 13704 27409 41114

Pour 3000000

debut 0 1819 3641 5462 7282

i <= 30000000/00/

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.

*avec ma version,*1.8.3

Quelle est ta version?

bidouilleelec: i <= 30000000/00/

bidouilleelec: *avec ma version,*1.8.3

????