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?
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
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.
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.
normal hast du 14byte puffer, sind die voll, werden die daten abgeholt :) (schlagt mich nicht, aber so hab ich das in erinnerung)
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.
Ü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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.