Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle Interruptgeschwindigkeit


von Rupplyn (Gast)


Lesenswert?

Hallo zusammen,

wie schnell kann ich denn Daten von der seriellen Schnittstelle mit dem 
PC abholen. Ich meine damit nicht etwa die Baudrate, sondern wie schnell 
mir z.B. die Serialport-Komponente in .Net einen Interrupt generiert.

Hintergrund ist foldender: Ich empfange einen Datenstring. Bei einem 
Event lese ich die Daten ein und prüfe ob ob der String komplett ist 
oder nicht. Ist der String komplett sende ich den nächsten Befehl an den 
Zielcontroller. Dabei habe ich festgestellt, dass je nachdem wie lang 
der Empfangsstring (variable Länge) ist eine variable Zeit zwischen 
Datenempfang und Daten senden liegt. Zu Debug-Zwecken habe ich bei jedem 
RX-Event ein Byte über die Schnittstelle gesendet, um zu Überprüfen, wo 
die Zeit verloren geht. Dabei habe ich festgestellt, dass die 
Debug-Bytes in praktisch konstanten Zeiten gesendet werden. Allerdings 
mit demselben Delay wie bei der normalen Datenübertragung.

Der Puffer der seriellen Schnittstelle wird wohl in konstanten 
Zeitabständen gelesen, worauf bei Datenempfang ein Event generiert wird. 
Jenachdem wie lang meine Empfangsdaten sind, verliere ich dabei immer 
Zeit. Gibt es eine Möglichkeit das zu umgehen?

von gast (Gast)


Lesenswert?

Um vorhersagenzu koennen, nach welcher Zeit ein System auf ein Ereignis 
reagiert, braucht man ein echtzeitfaehiges OS. Alles was W.......$ 
heisst, gehoert da bestimmt nicht dazu.

Gast

von Rupplyn (Gast)


Lesenswert?

Dann frag ich mich nur was mir meine 115k Datenübertragung bringen, wenn 
beim 2. Teil meins Datenstrings "ewig" gewartet wird, bis ich bescheid 
bekomme, dass Daten vorhanden sind.

von 6632 (Gast)


Lesenswert?

Die 115k kann man eh nur bei Blockuebertragung ausfahren. Sobald man 
delays drin hat, geht die Performace in die Knie. In einem embessed 
System auf 115k zu gehen macht das system nu anfaellig gegen 
kommunikationsbedingten Leistungsverlust. Lieber 9600 Kontinuierlich, 
als 115k Burstweise. Bei 115k kann jede 100us ein Interrupt kommen.

von horst (Gast)


Lesenswert?

normal hast du 14byte puffer, sind die voll, werden die daten abgeholt 
:)

(schlagt mich nicht, aber so hab ich das in erinnerung)

von Rupplyn (Gast)


Lesenswert?

gemessen hab ich zwischen den einzelnen Debug-Bytes ca. ne 1ms. Da wär 
ich mit 100us ja fast schon zu frieden. Die 14 Byte decken sich übrigens 
mit meinen Beobachtungen.

von Andreas K. (a-k)


Lesenswert?

Üblicherweise ist für Interrupts der Device Driver im Betriebssystem 
zuständig, nicht ein Software-Layer wie DotNet.

Ausserden muss man in diesem Zusammenhang zwischen einer echten 
seriellen Schnittstelle im PC und einer per USB angeschlossenen 
unterscheiden. Letztere wird dank USB nie schneller als 1ms pro 
Transaktion, egal bei welcher Bitrate, nur die Grösse der Transaktionen 
variiert dann noch.

von Rupplyn (Gast)


Lesenswert?

Das heißt für mich, dass ich auch mit anderen Komponenten das Verhalten 
nicht ändert?

Ist allerdings ein "richtiger" Comport. Das ich bei VCOMs das Problem 
habe war mir bewusst. Wobei die ja einen größeren Puffer haben? Dann 
würde sich der Durchsatz je nach Datenvolumen zumindest erhöhen, oder?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.