Pages: [1]   Go Down
Author Topic: Cosa fa esattamente la flush()?  (Read 817 times)
0 Members and 1 Guest are viewing this topic.
Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve! Mi chiedevo, se uno sketch usa la comunicazione seriale per mandare dati e alla fine non flusha.. cosa succede?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il flush serve a svuotare il buffer di ricezione in modo da togliere di mezzo eventuali dati accumulati nello stesso, ricevuti quando la comunicazione non era monitorata o richiesta.
Secondo me andrebbe eseguito PRIMA di iniziare una comunicazione e non dopo, proprio per evitare di leggere dati che erano già presenti nel buffer.
Logged


Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E' possibile che se alla fine di uno sketch non svuoto il buffer con la flush, questo si sovraccarichi non consentendomi di uploadare altri sketch su arduino a causa del buffer pieno?
Logged

0
Online Online
Shannon Member
****
Karma: 132
Posts: 10500
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, l'arduino si resetta quando carichi il codice, al massimo il tuo arduino prova a scrivere subito sulla seriale incasinando il boot-loader....
metti una delay prima di scrivere sulla seriale nel setup()
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Come ti ha consigliato lesto, metti SEMPRE un delay(3000) (minimo) in setup() per darti il tempo di aprire la seriale sul PC altrimenti l'Arduino ti apre subito la comunicazione non appena avviato bloccando la porta.

P.S.:
uno sketch non termina mai di essere eseguito. La funzione loop() viene eseguita (come dice il nome stesso) in ciclo infinito. L'unico modo per terminare un programma è quello di spengere fisicamente l'Arduino.
Logged


Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come ti ha consigliato lesto, metti SEMPRE un delay(3000) (minimo) in setup() per darti il tempo di aprire la seriale sul PC altrimenti l'Arduino ti apre subito la comunicazione non appena avviato bloccando la porta.

P.S.:
uno sketch non termina mai di essere eseguito. La funzione loop() viene eseguita (come dice il nome stesso) in ciclo infinito. L'unico modo per terminare un programma è quello di spengere fisicamente l'Arduino.
Esatto, la storia del loop mi era chiara. Allora mi è anche chiaro perchè quando attaccavo Arduino mi si impastava sempre! Non avevo messo il delay... E quindi mi dava sempre la seriale occupata e non mi faceva uploadare gli sketch!
Diagnosi esatta?  smiley-mr-green
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Logged


Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi la struttura di base per uno sketch che cominica in seriale quale sarebbe? (Giusto per evitare ulteriori casini... E se per purissimo caso ( smiley-sweat ) dovesse ricapitare cosa faccio?)
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi la struttura di base per uno sketch che cominica in seriale quale sarebbe? (Giusto per evitare ulteriori casini...

Nulla di particolare. Ricordati solo di mettere un delay(3000) proprio prima del Serial.begin, così che tu abbia circa 3 secondi per poter aprire il terminale.

Quote
E se per purissimo caso ( smiley-sweat ) dovesse ricapitare cosa faccio?)

La "manovra di emergenza" descritta qui (circa a metà pagina).
Logged


Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille. Quindi la flush() in sostanza, quando va usata?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22973
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima di leggere dalla seriale, se sai che il dispositivo trasmittente può inviare dati anche quando tu non li richiedi e tieni la connessione sempre aperta. In questo caso ciò che ricevi ma non leggi materialmente con Serial.read resta nel buffer e ti viene restituito non appena fai una lettura.
Logged


0
Online Online
Shannon Member
****
Karma: 132
Posts: 10500
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

diciamo che in linea di massima non dovresti mai usare la flush(), che comunque lavora solo sul buffer dei dati in ingresso
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: