Go Down

Topic: Funzionamento micros() ed errore su variabile ... (Read 316 times) previous topic - next topic

Stilita

Ho diviso io il thread separando questi post da QUEST'ALTRO thread ... gpb01


Su come "cucinare" micros, leggi qui.
Ho provato questo esempio con ESP32 ma mi da errore:

'long unsigned int time' redeclared as different kind of symbol
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

pgiagno

Hai capito il significato e cercato di correggerlo o aspetti che qualcuno te lo spieghi senza vedere il codice?

Ciao,
P.

Stilita

Hai capito il significato e cercato di correggerlo o aspetti che qualcuno te lo spieghi senza vedere il codice?

Ciao,
P.
Ho pensato che time è una parola riservata perchè diventa rossa, e quindi l'ho
chiamata tim, ma fa lo stesso.
Adesso ci ristudio su
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

gpb01

Ho pensato che time è una parola riservata perchè diventa rossa ...
... infatti "time" è una parola riservata e non la devi usare, ma c'è dell'altro ... nella definizione del tipo di variabile ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

Stilita

#4
Aug 16, 2019, 10:12 am Last Edit: Aug 16, 2019, 10:31 am by Stilita
Allora, ho eliminato "unsigned" e funziona, devo solo capire perchè.
Però con ESP32 mi da come Time : 42475( appena dopo resettato), mentre con "Nano" 52.
(come primo tempo , prima del delay, naturalmente)


Code: [Select]
long tim;

void setup() {
  Serial.begin(115200);
}
void loop() {
  Serial.print("Time: ");
  tim= micros();

  Serial.println(tim); //prints time since program started
  delay(1000);          // wait a second so as not to send massive amounts of data
}
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

pgiagno

Non occorre eliminare "unsigned" perché funzioni. È prudente lasciarcelo.

Il primo valore che scrive con il nano è 52, e gli altri che seguono?
Non ti dicono niente?

Non so perché con ESP32 ti dia l'altro valore, non ho ESP32 per provare, ma quelli che seguono?

Posta i risultati di entrambi

Ciao,
P.

Stilita

#6
Aug 16, 2019, 10:43 am Last Edit: Aug 16, 2019, 10:48 am by Stilita
Posta i risultati di entrambi

In effetti rimettendo "unsigned" va bene, devo avere fatto confusione prima.
Dai tempi che posto sotto, noto che sul Nano c'è l'incremento di 1 secondo ad ogni stampata, ed è giusto perchè c'è un delay, sull' ESP32 il primo  risultato sembra moltiplicato per mille, sembrano nanosecondi. :smiley-eek:

Con ESP32

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:9232
load:0x40080400,len:6400
entry 0x400806a8
Time: 42436
Time: 1041965
Time: 2041963
Time: 3041963
Time: 4041963
Time: 5041963
Time: 6041963
Time: 7041963
Time: 8041963
Time: 9041963
Time: 10041963
Time: 11041963
Time: 12041963
Time: 13041963
Time: 14041963
--------------------------------------------
Con Nano:

Time: 52
Time: 1000224
Time: 2000652
Time: 3001076
Time: 4001508
Time: 5001936
Time: 6002360
Time: 7002792
Time: 8003216
Time: 9003644
Time: 10004060
Time: 11004540
Time: 12005020
Time: 13005504
Time: 14005984
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

pgiagno

I nanosecondi non c'entrano.

Ripeto che non mi intendo molto di ESP32, ma non pensi che queste istruzioni:
Code: [Select]
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:9232
load:0x40080400,len:6400
entry 0x400806a8

che vengono eseguite PRIMA della prima stampata del ESP32 pesino un "pochino" di più del semplice:
Code: [Select]
  Serial.begin(115200);

del nano?

Ciao,
P.

Stilita

#8
Aug 16, 2019, 08:54 pm Last Edit: Aug 16, 2019, 09:02 pm by Stilita
I nanosecondi non c'entrano.

Ripeto che non mi intendo molto di ESP32, ma non pensi che queste istruzioni...


Non avevo pensato a quelle istruzioni iniziali dell'Esp32, pensavo che il programma partisse dopo
di loro, e quindi anche il conteggio.
Però si può  prendere per buono il tempo tra il 2° e il 3° ciclo e così via, e quindi noto che per il
Nano passano circa 450 micro/s, invece per l' altro nulla.
Forse perché  è  molto più  veloce?
Ciao.

Ps: ucci ucci, Guglielmo mi ha sistemato e  rinominato il post, e noto che ha incluso le parole
    "errore...variabile", che sia un indizio?
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

pgiagno

Il codice del nano prevede queste istruzioni
Code: [Select]
  Serial.print("Time: ");
  tim= micros();

  Serial.println(tim); //prints time since program started

poi conta 1.000.000 di microsecondi e ricomincia. Evidentemente quelle istruzioni durano circa 430 microsecondi.

Per quanto riguarda l'ESP32, senza codice è difficile spiegare il perché di quei dati.

Ciao,
P.

Stilita

Per quanto riguarda l'ESP32, senza codice è difficile spiegare il perché di quei dati.


Il codice è  lo stesso, e lo carico dalla ide di Arduino, cambio solo la scheda e la com.
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

Standardoil

Mi sembra strano
I due risultati sono concettualmente differenti...
Ricontrolla, è meglio..l
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Claudio_FF

#12
Aug 19, 2019, 07:17 am Last Edit: Aug 19, 2019, 07:44 am by Claudio_FF
Però con ESP32 mi da come Time : 42475( appena dopo resettato), mentre con "Nano" 52.
Il valore ritornato da micros al primo giro mi sembra una cosa del tutto irrilevante, visto che i tempi non si calcolano guardando il valore assoluto, ma piuttosto facendo la differenza tra il valore letto da quando si vuole iniziare a misurare il tempo e il valore attuale. Anche ee all'accensione micros ritornasse un numero casuale non cambierebbe nulla, a noi interessa solo la differenza tra due momenti. In particolare il momento di avvio del programma per noi corrisponde all'esecuzione della funzione setup, non al momento in cui si da alimentazione.
Una domanda ben posta è già mezza risposta.

Stilita

#13
Aug 19, 2019, 07:56 am Last Edit: Aug 19, 2019, 08:22 am by Stilita
Il valore ritornato da micros al primo giro mi sembra una cosa del tutto irrilevante, visto che i tempi non si calcolano guardando il valore assoluto, ma piuttosto facendo la differenza tra il valore letto da quando si vuole iniziare a misurare il tempo e il valore attuale. Se all'accensione micros ritornasse un numero casuale non cambierebbe nulla, a noi interessa solo la differenza tra due momenti.
In effetti non considero il primo valore, perchè ESP32 esegue alcune sue istruzioni in fase di partenza, e quindi io escludo il primo risultato e osservo dal 2° in poi, ESP32 sembra non avere ritardi, scorporando il delay(1000)
mentre Nano aumenta di circa 450 microsec. ogni iterazioni.
IL codice è lo stesso, lo riposto, se qualcuno ha voglia di provare , così confrontiamo i risultati.
A me da sempre i risultati al punto #6

Code: [Select]
unsigned long tim;

void setup() {
  Serial.begin(115200);
}
void loop() {
  Serial.print("Time: ");

  tim = micros();

  Serial.println(tim); //prints time since program started
  delay(1000);          // wait a second so as not to send massive amounts of data

}
...non sapete quanto ho cercato...pfui pfui
prima di rivolgermi al forum...

gpb01

La Serial.print(), per sua natura, introduce notevoli ritardi non costanti ... NON si effettuano misure di un ciclo in cui c'è la Serial.print(). Si accumulano i valori (volendo anche separatamente in un vettore di N elementi) e, fuori dalla misura del tempo, si stampano i valori.

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up