Ein wirklich einfacher, nicht preemptiver Task-Scheduler.
Dies ist ein super einfacher, nicht vorbeugender Task-Scheduler. Dieses Demo -Projekt wurde im Atmel Studio 7 für ATMEGA48P -Mikrocontroller durchgeführt, kann jedoch leicht portiert werden.
In diesem Zeitplaner geht es darum, jede Aufgabe mit einer ausgewählten Periodizität anzurufen und auszuführen.
Der Scheduler befindet sich im OS -Ordner (OS.C und OS.H). Obwohl es kein Betriebssystem ist, nenne ich es immer noch Betriebssystem, da die Benennung auf diese Weise einfacher ist (OS ist kürzer als Scheduler, Duh).
Es gibt drei wichtige, wichtige Funktionen:
Es gibt drei Staaten:
Blockiert: Warten auf einen Anruf vom Timer
Bereit: Bereit zur Ausführung
Suspendiert: Behindert, wird nichts tun
Abbildung 2. Zustandsdiagramm der Aufgaben.
Os_tasktimer () ist die Funktion, die die Aufgaben organisiert. Es sollte in einem Timer -Interrupt sein (in der Demo ist es ein 1 Sekundenspunkt -Timer, kann aber alles sein). Es gibt einen Zähler in der Funktion. Wenn der Zähler größer ist, dann ist die Ausbruchszeit der Aufgabe in den Bereitschaftszustand.
Abbildung 3. Aktivitätsdiagramm von OS_TaskTimer ().
Os_taskexecution () ist die Funktion, die die Aufgaben aufruft. Es sollte in der main () unendlichen Schleife sein. Es prüft, ob es vorbereitete Aufgaben gibt, und führt sie dann in einem FIFO -Stil aus. Es ist zu erwähnen, dass es aus diesem Grund nur weiche Echtzeit ist. Wenn Sie die Timings falsch wählen, gibt es möglicherweise zu viele Aufgaben in Ready State und es können unerwünschte Verzögerungen erfolgen.
Abbildung 4. Aktivitätsdiagramm von OS_TASKEXECUTION ().
Die Demo soll demonstrieren, wie der Scheduler funktioniert. Es gibt drei Aufgaben und jede Aufgabe blinkt eine LED (auf Port D 0,1,2) mit 1, 2 und 5 Sekunden. Die zweite Aufgabe beginnt im suspendierten Zustand und wird also nie ausgeführt.