Deine Serielle Kommunikation dahinter läuft ungefähr mit 115,2 kbit/s (115200 Baud), je nachdem was du eingestellt hast (mehrere MBaud halte ich für unrealistisch weil den Mikrocontroller das auf der anderen Seite ja auch begrenzt)
. Nun angenommen du willst jedes Byte einzeln lesen und zwar möglichst zeitnah. D.h. du musst 115,2 / 8 = 14,4 kbyte / s lesen. Das sind pro Byte dann: 1/14,4 kbyte = 0,069 ms pro Byte bei voller Auslastung. Da hast du recht. Das schafft man nicht wenn man 1ms wartet ->
Nun hat die Seriellport Implementierung in Hardware und im Betriebssystem jedoch eine FIFO drin. D.h. du musst nicht jedes Byte in Echtzeit auslesen (Was auf einem normalen PC auch gar nicht möglich wäre) sondern dein PC speichert die Bytes zwischen und du kannst sie dann am Stück lesen und dann warten.
Alle Implementierungen die ich bisher dazu geschrieben habe (Zwar nicht in Java sondern in C++) haben zwischen 10 bis 50 ms zwischen zwei Abfragen gewartet.
Pseudo Code:
Code:
while(Abbruchbedingung)
{
while(Rs232Buffer != empty)
{
ReadByte(s)
}
Sleep(n - Ms)
}
Weniger als 1 ms warten geht nur wenn man selber aktiv wartet. D.h. man liest die High Precission Clock des Systems aus und zählt ticks.
Zum Thema Multithreading in Java kann ich dir leider nichts sagen. (Solltest du C++ nehmen wollen melde dich
Lesezeichen