schneller zugriff auf serielle schnittstelle

Gast #542375
Hallo,
weiß hier jemand ob es unter LINUX eine schnellere möglichkeit gibt auf 
die serielle Schnittstelle zu schreiben als die write() Funktion? 
Hierbei braucht mein  Rechner ca. 20µsec vom Befehlsaufruf bis wirklich 
Daten geschrieben werden. Liegt natürlich auch immer an der 
Rechnerperformance, aber ich bräuchte das schneller, so ca.5µsec oder 
weniger.
Persönliche Seite #542392
Umgehe die Dateisystemarchitektur, komuniziere direkt mit dem 
Devicetreiber oder packe Deine Applikation in einen Devicetreiber. 
Verwende ein Echtzeit-OS, kein Linux.

Könnte es sein, daß Deine Timing-Vorstellungen ein bisschen 
realitätsfremd sind? 20µsec sind -bei 9600- gerade mal zwei Bitzeiten.
Gast #542407
Danke für den Tipp!
Nein, meine vorstellungen sind realistisch da ich mit 2MBaud arbeite und 
ein komplettes Byte entsprechend ca.5µs (incl.Start Stop) braucht.
Persönliche Seite #542548
Hmm. Dann verwendest Du aber nicht die serielle Schnittstelle im PC, 
denn die kann maximal 115200 Baud.

Was für eine Schnittstellenhardware verwendest Du denn? Könnte es sein, 
daß die einen Sende-FIFO aufweist?

Was für eine Anwendung ist das, die einerseits eine sehr hohe Datenrate 
und andererseits extrem kurze Reaktionszeiten benötigt?
Gast #542588
>Nein, meine vorstellungen sind realistisch da ich mit 2MBaud arbeite und
>ein komplettes Byte entsprechend ca.5µs (incl.Start Stop) braucht.
Wow, was für eine Milchmädchenrechnung
Welche Zeit meinst du, bis das erste Byte gesendet wird zwischen den 
Zeichen
Du beschwerst dich über 20us???
Linux kann auch Taskwechsel JEDERZEIT machen, das gibt dann Zeiten die 
noch größer sind wenn deine Anwendung erstmal kurz weg vom Fenster ist.
Solltest du mit einem USB-Seriellwandler arbeiten, dann ist der Begriff 
Milchmädchenrechnung noch sehr geschönt, siehe:
http://www.ftdichip.com/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf

Es würde mich schon interessieren welches Konzept auf einer normalen? 
seriellen Schnittstelle eine Genauigkeit von <5us benötigt.
Gast #542785
Ich arbeite mit einem Embedded ARM System.
Was heißt hier Milchmädchenrechnung?!
Erstens kann ich rechnen und zweitens auch ein Scope bedienen....
Die Anwendung sieht so aus, daß ich einen IO Pin setze (dauert ca.5µsec) 
und dann die Funktion write() aufrufe. Vom setzen des Pins bis Daten 
kommen sind es halt dann 20µsec.Ich schreibe permanent Daten (etwa 5-7 
Bytes) an verschiedene Adressen und lese dann eine ähnliche anzahl 
zurück. Und dann gleich die nächste Adresse und so weiter...
So ein Datentranfer dauert normalerwise dann etwa 50 -70µsec. Da sind 
20µsec doch schon ne ganze menge!
Gast #542822
Wer garantiert dir das zwischen dem setzen des IO-Pins(oder eigentlich 
dem was du vorher machst)und dem write von Linux kein Task 
zwischenzeitlich ausgeführt wird?
Wenn das write es erstmal dem Devicetreiber der Schnittstelle übergeben 
hat, dann kann gepuffert im Interruptbetrieb? mit FIFO? übertragen 
werden, das dürfte recht gut gehen und einen sehr geringe 
Interbyte-latenzzeit haben.
Was für Interbytezeiten werden erreicht? Laut deinen Angaben 50-70us für 
5 bis 7 Byte Interbytezeit=0. Also schreibe immer gepuffert. Solange der 
Puffer nicht abreißt gibt es keine 20us verzögerung.
Die Frage bleibt:
Welches Konzept erfordert das <5us losgesendet wird? Diese Anforderung 
an eine serielle Schnittstelle mit Linux als Betriebssystem halte ich 
für unrealistisch.
Gast #543046
Na, ich glaub ich muß wirklich den Kernel umschreiben. Die Treiber und 
Interruptroutinen der seriellen Schnittstelle sind ja schon mit den 
ganzen if´s und while´s sehr zeitaufwendig. Sind ja auch so geschrieben, 
daß sie möglichst vielseitig verwendbar sind. Ein weiteres Problem ist 
allerding, daß alle UART´s die selben Treiber und Interrupts benutzen...
Wie ist das eigentlich mit dem realtime LINUX Kernel. Hat der auf dem 
Gebiet irgendwelche Vorteile?
Gast #543812
Habe jetzt RTAI entdeckt. Das scheint ansich ganz brauchbar zu sein.
Wird quasie vor den eigentlichen Kernel gebaut. Allerdings hab ich noch 
keinen arm-patch für den aktuellen Linux Kernel gefunden nur für 386 
bzw. arm für version 2.4.irgendwas! weiß jemand ob es diesen patch als 
"freeware" überhaupt gibt?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.