ESP32-C3 Serial.printf et les formateurs

Bonjour,

C'est peut-être énorme mais je ne vois pas.
Le code sur ESP32-C3 (ESP32-devkit m-1 ) et platformIO

#include <Arduino.h>

hw_timer_t * timer;

uint64_t compteur1 ;
uint64_t compteur2 ;
uint64_t diff_compteur ;

uint64_t tour ;

void setup() 
{
  Serial.begin(115200) ;
  delay(1000);

  pinMode(19, OUTPUT)   ;  
  digitalWrite(19, LOW) ;
  // Config :
  // Timer 1, diviseur d'horloge = 2 (valeur minimale), mode = comptage
  // l'horloge des timers est fh/2 = 80 MHz
  // l'horloge qui pilote le timer est 40 MHz
  timer = timerBegin(1,2,true);  

  Serial.print("\n");
}

void loop() 
{
  compteur1 = timerRead(timer);
  digitalWrite(19,HIGH);
  compteur2 = timerRead(timer);
  
  digitalWrite(19,LOW);

  diff_compteur = compteur2-compteur1 ;
  Serial.println("ligne ne fonctionnant pas");
  Serial.printf("Tour = %d  Compteur A = %d  Compteur B = %d  différence = %d \n", tour, compteur1, compteur2, diff_compteur);

 Serial.println("lignes fonctionnant :");
  Serial.printf("Tour = %d ", tour);
  Serial.printf(" Compteur 1 = %d ", compteur1);
  Serial.printf(" Compteur 2 = %d ", compteur2);
  Serial.printf(" Diff = %d \n", diff_compteur);


  delay(5000);
  tour++;
  Serial.println("");

}

Le retour du moniteur série :

ligne ne fonctionnant pas
Tour = 1  Compteur A = 0  Compteur B = 200594467  différence = 0 
lignes fonctionnant :
Tour = 1  Compteur 1 = 200594467  Compteur 2 = 200594539  Diff = 72 

ligne ne fonctionnant pas
Tour = 2  Compteur A = 0  Compteur B = 401194467  différence = 0 
lignes fonctionnant :
Tour = 2  Compteur 1 = 401194467  Compteur 2 = 401194539  Diff = 72 

ligne ne fonctionnant pas
Tour = 3  Compteur A = 0  Compteur B = 601794467  différence = 0 
lignes fonctionnant :
Tour = 3  Compteur 1 = 601794467  Compteur 2 = 601794539  Diff = 72 

ligne ne fonctionnant pas
Tour = 4  Compteur A = 0  Compteur B = 802394467  différence = 0 
lignes fonctionnant :
Tour = 4  Compteur 1 = 802394467  Compteur 2 = 802394539  Diff = 72 saisissez ou collez du code ici

Ce doit être énorme mais pourquoi avec cette ligne :

Serial.printf("Tour = %d  Compteur A = %d  Compteur B = %d  différence = %d \n", tour, compteur1, compteur2, diff_compteur);

les indications à l'écran sont éronnées (valeur de compteur A).
Alors qu'avec les lignes :

Serial.printf("Tour = %d ", tour);
Serial.printf(" Compteur 1 = %d ", compteur1);
Serial.printf(" Compteur 2 = %d ", compteur2);
Serial.printf(" Diff = %d \n", diff_compteur);

Les indications sembles correctes dans cette deuxième forme d'impression.

Merci pour vos lumières.

Un uint64_t se formate avec %llu.
Mais pourquoi cela fonctionne t'il dans la deuxième forme ? je ne saurais le dire.

Merci c'est bon.

Je me doutais un peu que c'était un mauvais choix de formateur, mais dans la doc que j'avais trouvé, il n'y avait pas %llu.

Il est possible que la deuxième forme fonctionne avec %d parce que 401194467 tient dans un 32 bits, et comme ESP32 est little endian ...

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