Rolf M. schrieb:
> Man kann auch die realtime-Funktionen dafür verwenden, also
> clock_gettime und clock_nanosleep.
Vielen Dank für den Tipp. Ich wusste, es lohnt sich, ein Stückchen Code
zu posten... ;)
Rolf M. schrieb:
> Letztere hat auch den Vorteil, dass
> man auf einen absoluten Zeitpunkt warten kann, so dass man die
> "correction" nicht braucht, die eh immer nur eine begrenzte Genauigkeit
> bietet.
Ich hab's ausprobiert. Ja, "correction" braucht man damit nicht. Aber
die Genauigkeit bzw. Offset bzw. Jitter ist gleich. Er schwankt im
Durchschnitt etwa 100 Mikrosekunden mit einer Periode von etwa 10 bis 20
Sekunden, mit einigen, heftigen Ausreißern (Spitze: 70000
Mikrosekunden).
Ansonsten finde ich es erstaunlich, wie gut man hier auch unter Last in
einem Multitasking-System periodische Tasks einfach steuern kann. Ich
habe noch einen andere Regel-Algorithmus für "correction" ausprobiert,
der sich weniger durch Ausreißer stören lässt.
Was wirklich weniger Jitter bringt, ist sched_setscheduler(SCHED_FIFO).
Das eliminiert die Ausreißer komplett und reduziert den Jitter. Aber die
langsame Schwingung auf dem Jitter ist dennoch vorhanden.
Spannend.
Vielleicht probiere ich auch noch SCHED_DEADLINE aus. Mal sehen...