Verwenden von select () für nicht blockierende serielle Daten

8

Ich arbeite an einem Projekt, bei dem ich Daten von einer seriellen Schnittstelle lesen und schreiben muss, und das muss aus Gründen, die ich nicht erklären werde, nicht blockierend sein. Die Funktion select () sieht so aus, als ob ich sie verwenden möchte, aber ich habe Schwierigkeiten, eine funktionierende Implementierung zu erhalten.

In open_port () definiere ich die Einstellungen für den Port und dass er nicht blockiert ist. In anderenSelect () ordne ich den Deskriptor dem open_port () zu und versuche zu lesen. Ich habe auch einen 1-Sekunden-Schlafanruf am Ende der Funktion, um zu versuchen, zu vermeiden, dass das Lesen für die Hardware zu schnell ist.

Beim Ausführen erhalte ich eine Nachricht, die jede Sekunde für "keine Daten verfügbar" ausgibt, bevor ich die Nachricht sende, und nachdem ich eine Nachricht gesendet habe, druckt sie sie aus, aber es ist normalerweise in Stücken mit Binärzeichen. Wenn zum Beispiel das Wort "Puffer" gesendet wird, wird "ffer" gefolgt von einem Binärzeichen gedruckt.

Ich habe fast keine Erfahrung mit termios oder select, so dass irgendwelche Vorschläge geschätzt werden würden.

%Vor%     
Kevin Corder 31.07.2012, 21:09
quelle

1 Antwort

1

Wenn Sie read () verwenden, erhalten Sie keine mit Null beendete Zeichenfolge, also

%Vor%

ist offensichtlich eine schlechte Idee. Mach ein,

%Vor%

, bevor Sie es ausdrucken.

    
righteous.ninja 31.07.2012 23:38
quelle

Tags und Links