Gast
#2479279
Hallo, ich programmiere meistens den USART auf einem AVR und finde das Interrupt-Konzept sehr schön, weil man in der Routine die Daten mit einer State-Machine sammeln kann und immer genau weiß, wann ein Datensatz komplett da ist. Ich möchte jetzt auf einem Embedded System unter Linux Daten in einem bestimmten Format auslesen, die von einem AVR über die serielle Schnittstelle hereinkommen. Interrupt-gesteuert geht ja leider nicht, also muss ich wohl in der Hauptschleife die Daten einsammeln. Ich habe jetzt mal probiert, das Verhalten unter dem AVR nachzubilden, indem ich die Schnittstelle mit O_NONBLOCK öffne und den Aufruf von read auf jeweils ein Byte begrenze. Das ist aber total langsam. Mit einem Testprogramm habe ich herausgefunden, dass die Daten da blockweise einlaufen, mit größeren Pausen dazwischen. Wobei die Länge der Blocks um einen Mittelwert herumschwankt, aber immer mal größer und mal kleiner ist. Manchmal kommt auch tatsächlich nur ein Byte. Wie macht man das am geschicktesten? Den Artikel serielle Schnittstelle habe ich natürlich gelesen aber leider nichts gefunden, was mir da weiterhelfen würde. Wäre nett, wenn jemand mit einem Beispiel aushelfen könnte.