Linux Version: 4.9.59Linux Serial Port RAW-Modus
Plattform: Raspberry Pi 3 Modell B
USB-Seriell: FTDI4232
Ich möchte einen großen Teil der Daten von einer Maschine gelesen (ungefähr 4096 Bytes). Alle druckbaren Daten im ASCII-Format. Die Daten kommen kontinuierlich in einer Übertragung; sobald der Benutzer die Schaltfläche für die Datenübertragung gedrückt hat. Dieser Vorgang findet einmal in 30 Minuten statt. Die Daten enthalten mehrere CR LF.
Ich habe den seriellen Anschluss als RAW Input Mode konfiguriert.
config.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOE);
this->minChars = 5000;
this->timeOut = 100000;
if(this->timeOut > 0)
config.c_cc[VTIME] = this->timeOut;
else
config.c_cc[VTIME] = 0;
if(this->minChars > 0)
config.c_cc[VMIN] = this->minChars;
else
config.c_cc[VMIN] = 0;
Lesen Funktion:
ready = epoll_wait(this->epfd, &this->events, 1, this->ePollTimeout);
returnVal = read(this->fd, readDataBuffer, 8192);
Allerdings, wenn ich von der seriellen Schnittstelle gelesen das System bricht die eingehenden Blob in zu mehreren Paketen und einige der Pakete verloren gehen.
Eg. : Ich habe 278 Bytes an Daten gesendet. Das System brach dies in 3 Paketen zufälliger Länge. Die Paketlänge variiert jedes Mal mit der Ausführung. Bitte um Rat.
Ihre Code-Schnipsel sind nicht ausreichend, um sicherzustellen, dass Sie wirklich Raw-Modus richtig konfiguriert haben. Auf der Hilfeseite: "Fragen, die Debugging-Hilfe suchen (" Warum funktioniert dieser Code nicht? ") Muss ... den kürzesten Code enthalten, der für die Reproduktion in der Frage selbst erforderlich ist. Siehe [Erstellen einer Minimal, Complete und Überprüfbares Beispiel] (https://stackoverflow.com/help/mcve). " Z.B. Ihre Verwendung von epoll_wait() legt nahe, dass Sie nicht blockierende Lesevorgänge verwenden, die sich wie beschrieben verhalten können. – sawdust