20.10.2019, 10:28
Hallo!
Wie bereits oben beschrieben habe ich folgendes Problem:
Ich lese einen Sensor über die serielle Schnittstelle aus. Dieser liefert mir alle 10 ms einen Wert ( 17 Byte ).
Um die Daten des Sensors zu lesen benötige ich daher eine Laufzeit von ~ 10 ms, da mir ansonsten der Puffer vollläuft.
In meiner Testumgebung funktioniert das auch soweit.. da ich hier nur einen Producer verwende und einen Consumer. - die 10 ms können soweit problemlos eingehalten werden.
Habe nun meine Schleife in einem Hauptprogramm mit 6 gleichzeitig ablaufenden parallelen Schleifen und erreiche diese Zeit nicht mehr und es kommt zum
Pufferüberlauf. ( Sehe mir hierfür über die Eigenschaft Bytes at Port die Bytes im Puffer der Schnittstelle an -> diese steigt kontinuierlich, solange bis es zum Überlauf kommt)
Puffergröße ändern bringt auch nur bedingt Vorteile:
Ein weiteres Problem tritt in meiner Visualisierung auf: wenn ich solange zum auslesen der Daten brauche, werden Änderungen vom
Sensor erst extrem spät visualisiert, da ja immer die ältestens Informationen aus dem Puffer zuerst ausgelesen werden. ( das ganze verschlimmert sich eben bei größeren Puffern)
Da ich mit meinem Latein ein wenig am Ende bin.. meine Frage:
Gibt es iwie die Möglichkeit für diese Schleife eine bestimmte Rechenleistung zu reservieren, damit ich die Zeit "garantieren" kann? .. / oder eine Art Priorisierung?
oder wie kann man so ein Problem noch beheben?
(das ganze Programm läuft auf einem Windows 7 Rechner)
Vielen Dank für eure Unterstützung!
LG[attachment=60460]
Wie bereits oben beschrieben habe ich folgendes Problem:
Ich lese einen Sensor über die serielle Schnittstelle aus. Dieser liefert mir alle 10 ms einen Wert ( 17 Byte ).
Um die Daten des Sensors zu lesen benötige ich daher eine Laufzeit von ~ 10 ms, da mir ansonsten der Puffer vollläuft.
In meiner Testumgebung funktioniert das auch soweit.. da ich hier nur einen Producer verwende und einen Consumer. - die 10 ms können soweit problemlos eingehalten werden.
Habe nun meine Schleife in einem Hauptprogramm mit 6 gleichzeitig ablaufenden parallelen Schleifen und erreiche diese Zeit nicht mehr und es kommt zum
Pufferüberlauf. ( Sehe mir hierfür über die Eigenschaft Bytes at Port die Bytes im Puffer der Schnittstelle an -> diese steigt kontinuierlich, solange bis es zum Überlauf kommt)
Puffergröße ändern bringt auch nur bedingt Vorteile:
Ein weiteres Problem tritt in meiner Visualisierung auf: wenn ich solange zum auslesen der Daten brauche, werden Änderungen vom
Sensor erst extrem spät visualisiert, da ja immer die ältestens Informationen aus dem Puffer zuerst ausgelesen werden. ( das ganze verschlimmert sich eben bei größeren Puffern)
Da ich mit meinem Latein ein wenig am Ende bin.. meine Frage:
Gibt es iwie die Möglichkeit für diese Schleife eine bestimmte Rechenleistung zu reservieren, damit ich die Zeit "garantieren" kann? .. / oder eine Art Priorisierung?
oder wie kann man so ein Problem noch beheben?
(das ganze Programm läuft auf einem Windows 7 Rechner)
Vielen Dank für eure Unterstützung!
LG[attachment=60460]