FreeRTOS lässt sich vermutlich nur mit erheblichem Aufwand in das
Ardunio System einbringen. Ich denek, dass du diese simple Aufgabe auch
selbst erledigen kannst.
Zum Beispiel so:
1 | unsigned long interval;
|
2 |
|
3 | void setup
|
4 | {
|
5 | interval=millis()/10 +1;
|
6 | }
|
7 |
|
8 | void loop()
|
9 | {
|
10 | query_my_sensors();
|
11 | control_the_motor();
|
12 |
|
13 | // wait until end of interval
|
14 | while (millis()/10 < interval) {};
|
15 | interval++;
|
16 | }
|
In der Setup Routine holst du dir die Systemzeit, teilst sie durch 10
und addierst 1. Das nächste Intervall ist dann in 10ms.
In der Hauptschleife fragst du zuerst die Sensoren ab und speicherst
ihre Zustände in irgendwelchen Variablen.
Dann rufst du die Motorsteuerung auf. Sie reagiert womöglich auf die
Werte in den Sensor-Variablen.
Dann wartest du auf das Ende des ersten Intervalls.
Dann incrementierst du den Intervall-Zähler und wiederholst die
Hauptschleife.
Diese Art von Intervall-Berechnung stellt sicher, dass die Hauptschleife
exakt alle 10ms wiederholt wird. Vorgesetzt ist natürlich, dass die
beiden aufgerufenen Funktionen selbst nicht mehr als 10ms in Anspruch
nehmen.
Die Motorsteuerung würde ich als Zustandsautomat (google danach)
entwickeln. Ein PID Algorithmus ist damit relativ geradlinig umsetzbar.