MiniOS, Beispiel

Beispiel-Task und Hinweise zur Anwendung von MiniOS.

Eine Task-Hauptfunktion als Beispiel:

 void Task0(void)            // Task0...Task250 max
 {
     static char TaskVar;    // static: Var behält Wert
                             // bei einem Task-Wechsel
     SCHEDULE()              // Task-Wechsel: Init Tasks
     while (1)               // Task-Loop
     {
         DeineFunktion();    // User-Funktion
         while (!INPUT_PIN)  // warten auf Hardware-Pin
         {
             SCHEDULE()      // mit Task-Wechsel
             if (INPUT_PIN) 
                 break;      // bis Pin == 1
         }
         WeitereFunktion();  // User-Funktion
         OS_WaitTimer(400);  // Starte Wait-Timer...
         SCHEDULE()          // ...derweil Taskwechsel
     }
 }

Bitte beachten:

  • Lokale Task-Variablen, die den Task-Wechsel überdauern sollen, müssen static deklariert sein. Sie bleiben im RAM und behalten ihre Werte.

  • Non-Static-Variablen sind hier erlaubt:

    • lokale Variablen in User-/Unterfunktionen der Task.
    • lokale Variablen die nur bis zum nächsten Taskwechsel überleben müssen.
  • Jede Task muss mindestens einen sich wiederholenden Task-Wechsel - z.B. SCHEDULE() - enthalten, um die weiteren Tasks nicht zu blockieren.

  • Ein Kontextwechsel wie SCHEDULE(), darf nur in der Task-Hauptfunktion (nicht in einer Task-Unterfunktion) aufgerufen werden.

  • Task-Hauptfunktionen können mittels Mailboxen, shared Memory und Semaphoren miteinander Daten austauschen.

  • Task-Hauptfunktionen können keine Parameter-Werte empfangen oder zurückgeben.

  • Für den Task-Wechsel (Kontext-Switching) benötigt MiniOS die ANSI-C-Bibliothek SETJMP.H (diese ist in einer Standard-C-Umgebung normalerweise vorhanden...).

  • In einer ISR (Interrupt-Subroutine) dürfen nur die dafür bezeichneten API-Funktionen aufgerufen werden, siehe API-Doku.

  • Die Integration von MiniOS in ein Projekt ist simple: OS-Lib-Dateien mittels header.h ins Projekt inkludieren und Projekt neu builden.

  • Compiler-Optimierung ausschalten oder Optimierungsgrade testen...

  • ...und/oder globale Variablen die in ISRs verändert werden, volatile deklarieren (z.B. Semaphoren, Mailbox, eigene Globale).

  • Bitte Anleitung und API-Doku zum Gebrauch von MiniOS lesen!