Go Down

Topic: Velocità del loop Mega 2560 (Read 9 times) previous topic - next topic

MauroTec


se cerchi bene in giro puoi usare la printf senza bisogno di modificare nulla, l'ho usato personalmente ma non ho uppato il codice... ma l'avevo trovato facilmente con google.


Esatto, la printf & company scrivono già nella prima seriale, cioè su USART0, ma il codice che ho postato vale anche per le altre seriali. Inoltro con lo stesso sistema scrivo sul display con fptrintf 20x4.

In genere qualunque funzionalità mi serva tendo ad usare cio che già offre la avr-libc, sempre che sia possibile.
Più in la dovrei riscrivere il codice per il display 64128 usando sempre lo stesso sistema, in questo modo riutilizzo più volte sempre lo stesso codice fornito dalla avr-libc
diversamente usando molte librerie il codice si gonfia rapidamente. Poi è quello che viene fatto anche nel core di Arduino, dove la print viene usata anche per altre cose, almeno così mi ricordo.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

tuxduino


Tuxduino, non avevo proprio guardato la main.cpp sei stato geniale :), però mi chiedevo ....


:)


Adesso che le ISR di ricezione seriale vengono eseguite solo quando arrivano dei byte, cosa implica l'aver tolto quella linea? perchè se è stata messa un motivo c'era ... o no?


Ho risposto qualche commento fa. Ripeto brevemente: serialEventRun fa sostanzialmente questo (pseudocodice per essere più chiari):

if (ci sono byte nel buffer di ricezione della seriale) then
   chiama la funzione serialEvent
endif

Nel caso della UNO lo fa per la sola Serial, nel caso della Mega lo fa per Serial, 1, 2, 3. A prescindere dal fatto che all'utente servano o meno.
Commentando quella riga, l'utente non dovrà più implementare la funzione serialEvent() (una per ogni seriale che usa), ma dovrà esplicitamente scrivere:

Code: [Select]

if Serial.available() {
   fai qualcosa
}


per le seriali che usa.


Tra l'altro hai reso più veloce anche la UNO, non ho provato ma dovrebbe essere così

ciao


Appunto, appena hai tempo e voglia fai una prova. :)

pablos

#112
Jan 10, 2013, 06:34 pm Last Edit: Jan 10, 2013, 06:56 pm by pablos Reason: 1
Quote
fa sostanzialmente questo (pseudocodice per essere più chiari):

if (ci sono byte nel buffer di ricezione della seriale) then
   chiama la funzione serialEvent
endif

Nel caso della UNO lo fa per la sola Serial, nel caso della Mega lo fa per Serial, 1, 2, 3. A prescindere dal fatto che all'utente servano o meno.
Commentando quella riga, l'utente non dovrà più implementare la funzione serialEvent() (una per ogni seriale che usa), ma dovrà esplicitamente scrivere:

Code:

if Serial.available() {
   fai qualcosa
}

Ok, chiaro

Quote
Appunto, appena hai tempo e voglia fai una prova. smiley

Non ho provato perchè non ce l'ho io ahahahha  (non avevo specificato), tu ce l'hai  :smiley-mr-green:

riguardo a un appunto che hai fatto a pag 5 che mi era sfuggito
Quote
A proposito dell'influenza della seriale sulle prestazioni, vorrei sottolineare i risultati che ho ottenuto nel mio sketch di prova: tra baud rate di 9600 e 115200 c'è una differenza significativa.
Va ricordato però che nelle ultime versioni di Arduino anche la trasmissione seriale è fatta via interrupt, e diventa bloccante solo nel momento in cui il buffer di trasmissione è pieno, quindi in realtà se si trasmettono "pochi" (1) byte alla volta, l'impatto complessivo dovrebbe essere molto limitato.

ho rifatto i test prima con baud rate 9600 e 115200, non ho rilevato nessuna differenza

ciao
no comment

tuxduino

Quote
ho rifatto i test prima con baud rate 9600 e 115200, non ho rilevato nessuna differenza


Sì ma con quale codice ? Inviavi caratteri oppure era solo uno sketch vuoto con un argomento diverso passato alla begin() ?

pablos

inviavo caratteri, ma c'era un errore nello sketch  :D , confermo c'è un abisso tra i 2 baud rate. 
no comment

Go Up