Hi zusammen,
auch wenn ich vermute, dass die meisten von euch von Echtzeitsystemen keine Ahnung haben, versuche ich dennoch mein Glück. Ich hoffe, ihr könnt mir folgen.
Ich erfasse sehr viele Messwerte und muss dieses auswerten und speichern.
.
Aktuell habe ich eine Schleife, in der Datenerfassung, Auswertung und Protokollierung erfolgen. Die Messdaten werden teils parallel, teils nacheinander eingelesen.
Aktuell habe ich das in der Schleife sequenziell so aufgebaut. Ihr müsst euch vorstellen, dass die Schleife pro Messung mehrmals durchlaufen wird:
1. Datenerfassung aller Sensoren (Daten werden gepuffert und z.B. alls 100 ms 100 Werte ausgelesen)
2. Prüfen, welche Daten relevant sind bzw. welche Sensoren auszuwerten sind
3. Pufferung der relevanten Messwerte
4. Messzeit abwarten
5. Wenn Messzeit(en) abgelaufen, Daten speichern (binär, also nicht im
ASCII-Format o.ä.)
6. Schleife von vorne beginnen und erneut prüfen, ob das Messende vorliegt, eine neue Messung beginnen soll o.ä.
Es kann folgendes sein: Messzeit 5 Sekunden
Und z.B. nach 1 Sekunde beginnt die Messung von Sensor 1, nach 2 weiteren Seunden die von Sensor 2. Wenn die Messung von Sensor 1 dann zu Ende ist und die Daten protokolliert werden, läuft die Messung von Sensor 2 noch weitere 3 Sekunden und wird dann protokolliert. In der Zeit kann aber die Messung von Sensor 1 wieder beginnen.
Mein Problem ist nun, dass das Speichern der Datei sehr lange dauert (ca. 100 - 500 ms), selbst bei einer Dateigröße von 300 Bytes.
Die Messwerte werden zwar gepuffert und gehen auch bei Verzögerungen nicht verloren, aber die Messzeit variiert, da aufgrund der Verzögerungen der Schleifendurchlauf stark variieren kann.
Nun dachte ich mir, ich nehme eine Schleife für Erfassung und Bewertung (deteministisch) und eine parallele While-Schleife, die die Protokollierung übernimmt. Ich habe übrigens eine Single-Core-CPU.
In der Erfassungs-Schleife (höchste Priorität) würde ich z.B. alls 100 ms meine Messwerte auslesen und dann auswerten. In der Zeit, in der auf die Messwerte gewartet wird, könnten eventuelle Speichervorgänge in der parallelen Schleife durchgeführt werden.
Die CPU würde vermutlich in der Wartezeit der Erfassungs-Schleife die parallele Speichern-Schleife abarbeiten, sofern ich dieser Daten übergebe.
Ich hoffe, ihr konntet mir nun halbwegs folgen.
Habt ihr 'ne Ahnung, ob dieses Vorgehen sinnvoll ist der kennt ihr Alternativen?
Grüße
Matze