bytes gehen in serial buffer verloren

Hallo,

ich habe das Problem, dass Daten aus meinen Protokoll verloren gehen.
Sowohl mit nem Due als auch mit nem Mega.

Ich hab das jetzt mal aufs einfachste runter gebrochen:

Habe eine Konsolenapplikation, die ein ByteArray über UDP empfängt und auf den Serial port schreibt

void port::on_sendValues(QByteArray data){
    int written=0;
    for(int i=0;i<data.length();i++){
        written += serial->write(data.mid(i,1));
            serial->flush();
        QThread::msleep(5);
    }
    if(written != data.length())
        printf("error");
}

auf Arduino Seite möchte ich lediglich die eingehenden Bytes ausgeben:
while(Serial.available() > 0)
{
byte data = Serial.read();
Serial.write(data);
}

Leider sieht so eine Ausgabe dann wie folgt aus:
UDP: 0 1 2 3 4 5 6 7
SERIAL: 0
SERIAL: 2 5 7

Woran kann das liegen?

iamable: Woran kann das liegen?

Was ist das für ein Befehl, was macht der:

  QThread::msleep(5);

Das sieht für mich extrem verdächtig nach "Busy waiting" aus.

Wenn Du beim Auslesen des seriellen Eingangspuffers so lange wartest, bis der Puffer übergelaufen ist, gehen Dir selbstredend Zeichen verloren.

Mal angenommen, die 5 in msleep(5) stünde für 5 Millisekunden "Pause", und Du machst diese Pause nach jedem eingelesenen Zeichen, dann würde der Puffer nach einer Weile unweigerlich überlaufen, wenn Du die Zeichen mit einem Zeitabstand von weniger als 5 Millisekunden von Zeichen zu Zeichen sendest.

Das ist die Sende-Routine auf dem PC. Nicht der Arduino! Die legt wahrscheinlich das aktuelle Thread für 5ms schlafen.

Wobei das etwas seltsam ist. Du schreibst ein Zeichen, leerst den Puffer, schläfst für 5ms und schreibst das nächste Zeichen? Wieso nicht alles in den Puffer schieben und dann erst flush() machen?

Oh man es geht endlich. das problem lag nicht daran, dass bytes nicht bei arduino angekommen sind, sondern der rückweg hat nicht funktioniert wie er sollte. auf seiten arduino war alles bestens. den sleep hatte ich eingebaut, weil ich vermutet hatte, dass es ankommt wenn ich langsamer schreibe. hatte mich ja selbst gewundert wie die paar bytes vermeintlich nicht ankommen konnten.

naja wie auch immer. thread hat sich erledigt und ich bin glücklich :)

danke euch