Go Down

Topic: Tempo di esecuzione elaborazioni su ethernet, miglioro con la DUE? (Read 453 times) previous topic - next topic

Janos

Sto implementando un software che deve gestire tutta una serie di istruzioni di lettura/scrittura dati su ethernet ma controllando il tempo necessario ad eseguire il codice mi sono accorto che è lunghissimo: 150ms per cose non troppo complicate. Secondo voi il collo di bottiglia lo fa la potenza di calcolo dell'Arduino UNO o ci sono altri vincoli legati alla SPI? In altre parole, utilizzando la DUE + Ethernet Shield potrei migliorare?

EDIT: Errore mio, per debug inviavo un bel po di dati sulla seriale, questa si intasava ed andando a spulciare cosa fa la serial.write ho visto che se il buffer è pieno aspetta di aver trasmesso il dato.....
Tolgo le comunicazioni seriali sono sceso a 3ms... =) Ad ogni modo, se montassi la DUE migliorerei ancora? E che margine potrei avere rispetto a 3ms? Infine, si può montare la ethernet shield sulla DUE, vero?

Scusate la raffica di domande...   :smiley-sweat: :smiley-sweat: :smiley-sweat:

leo72

Se l'Ethernet Shield che usi te è il modello R3 la risposta è sì, perché adatta i livelli di tensione alla tensione di funzionamento dell'Arduino su cui è agganciata. Altrimenti non so, perché la DUE lavora a 3V3 mentre la UNO e la MEGA a 5V e le vecchie Ethernet erano fatte per queste schede.

Sulla potenza non mi esprimo ma, a logica, dovrebbe funzionare meglio viste le superiori capacità del SAM.

Janos

Si, ho la REV3, quindi a posto... Ho visto che solo per fare la client.read di tutti i dati ci metto 2ms circa. Quel tempo lo potrei abbassare o è un limite della SPI o del W5100?

leo72


Si, ho la REV3, quindi a posto... Ho visto che solo per fare la client.read di tutti i dati ci metto 2ms circa. Quel tempo lo potrei abbassare o è un limite della SPI o del W5100?

Qui ci vuole uno che "spippola" con l'Ethernet Shield...  :smiley-sweat:

uwefed

l'arduino Due ha un controller piú veloce e piú potente della UNO e dovrebbe essere piú veloce nei calcoli.
Senza conoscere il codice che usi non posso fare nessua conferma o smentita.
Penso che é possibile scrivere un sketch senza condizioni di compilazione differente o funzionalitá differente che funzioni sia sulla UNO che sulla DUE e che sulla DUE sia piú lento rispetto la UNO.

Ciao Uwe

pablos

Non capisco come tu abbia fatto i conti, come tu abbia determinato i 2ms. Comunque la ethernet di arduino è connessa a un router o switch una rete dove ci vogliono alcuni ms tra client e server, il pacchetto fa un sacco di giri prima di arrivare, se la usi da ip pubblico aumenta ulteriormente, su 3G peggio ancora.

Io se pingo il mio router con un Pentium 7 ci metto 2ms ed è qui sulla scrivania, secondo me otterrai una grande differenza su 100-1000kb ma su un byte solo dubito tu ottenga meno di 1ms, su un pacchetto solo non è il processore che fa la differenza.
no comment

Janos


Non capisco come tu abbia fatto i conti, come tu abbia determinato i 2ms.


Così:

Code: [Select]

unsigned long int tempo;
tempo = micros()
while(client.available) {
  buff[i++] = client.read();
}
Serial.println(micros() - tempo);


L'arduino era collegato direttamente con una patch al pc...

pablos

fallo con un analizzatore di rete, fatto da sketch su se stesso è del tutto relativo
no comment

Go Up