home *** CD-ROM | disk | FTP | other *** search
- (**********************************************************)
- (* *)
- (* Filename SCHEDUL.DCL *)
- (* *)
- (* TOOLBOX-Spezial III Echtzeitverarbeitung *)
- (* *)
- (* (C) TOOLBOX und Thomas Lang 1988 *)
- (* *)
- (* Dieses File enthält die für den Scheduler not- *)
- (* wendigen Deklarationen. Es kommen nur diejenigen *)
- (* vor, die in direktem Zusammenhang mit dem Scheduler *)
- (* benötigt werden, um dessen Aufgaben zu erledigen. *)
- (* Alle indirekt notwendigen Definitionen, wie etwa *)
- (* solche benötigter Prozeduren, sind hier nicht mit *)
- (* enthalten. *)
- (* *)
- (**********************************************************)
-
- Const
- AnzahlHoch=5; (* Anzahl der verwalteten *)
- (* Aufgaben mit höchster *)
- (* Priorität *)
-
- AnzahlFifo=20; (* Anzahl der verwalteten *)
- (* Aufgaben in einem Fifo: *)
- (* d.h. First in First Out *)
- (* dies ist nicht notwendig *)
- (* gleich der Anzahl der *)
- (* verschiedenen Aufgaben, *)
- (* die mittels Fifo aufge- *)
- (* rufen werden können *)
-
- VerschFifo=8; (* Anzahl der verschiedenen *)
- (* Aufgaben, die in Fifo *)
- (* verwaltet werden und *)
- (* mit jeweils einer extra *)
- (* Prozedur aufgerufen *)
- (* werden können *)
-
- AnzahlPeriodic=5; (* Anzahl der verwalteten *)
- (* Aufgaben, die perio- *)
- (* disch und mit niedrig- *)
- (* ster Priorität bearbei- *)
- (* tet werden *)
-
- FastUnendlich=1E37; (* eine der größten Reals, *)
- (* die als nächste Zeit, *)
- (* zu der was getan werden *)
- (* soll, unendlich ist *)
-
- NullBelastung=2.57; (* Anzahl der Durchläufe *)
- (* des Schedulers in 1/100 *)
- (* Sekunden ohne Belastung *)
- (* mit Testprogramm Test02 *)
- (* ermittelter Wert *)
-
- Type
- T_Per=Record
- ZuTun: Boolean; (* gibt an, ob Aufgabe zu *)
- (* erledigen ist *)
-
- Zeit: Real; (* zu welchem Zeitpunkt *)
- End; (* zu Record T_Per *)
-
- T_Fifo=Record
- Nummer: Byte; (* gibt an, welche Aufgabe *)
- (* zu erledigen ist *)
-
- Param: Integer; (* Parameter, der mit *)
- (* übergeben wird *)
- End; (* zu Record T_Fifo *)
-
- Prioritaet=Record
- Hoch: Array[1..AnzahlHoch] Of Boolean;
- (* True bedeutet, Aufgabe *)
- (* muß bearbeitet werden *)
-
- Fifo: Array[1..AnzahlFifo] Of T_Fifo;
- (* Inhalt gibt die zu *)
- (* erledigende Aufgabe an, *)
- (* evtl. Parameter wird in *)
- (* Param mit übergeben *)
-
- Periodic: Array[1..AnzahlPeriodic] Of T_Per;
- (* Inhalt ist die Zeit, zu *)
- (* der die Aufgabe zu *)
- (* bearbeiten ist *)
- End; (* zu Record Priorität *)
-
- DoppelWort=Record
- AnteilHoch, (* 2 Integer, um oft*)
- AnteilNiedrig: Integer; (* addieren *)
- (* zu können *)
- End; (* zu Record DoppelWort *)
-
- Var
- Aufgabe:Prioritaet; (* Aufgaben sind nach oben *)
- (* angeführten Prioritäten *)
- (* untergliedert *)
-
- FifoIndexIn, (* Index, um nächste Auf- *)
- (* gabe in Fifo zu schrei- *)
- (* ben *)
- FifoIndexOut:Integer; (* Index, um nächste Auf- *)
- (* gabe aus Fifo zu holen *)
-
- PeriodicIndexOut:Integer; (* hier nur nächste Stelle *)
- (* ab der nachgeschaut *)
- (* werden soll, ob was zu *)
- (* bearbeiten ist *)
-
- FifoLeer:Boolean; (* ob Fifo leer ist *)
-
- HochOverFlow, (* Anzahl, wie oft Aufgabe *)
- (* hoher Priorität gesetzt *)
- (* werden sollte, obwohl *)
- (* sie schon anstand *)
- FifoOverFlow, (* Anzahl, wie oft Aufgabe *)
- (* in Fifo gestellt werden *)
- (* sollte, obwohl kein *)
- (* Platz mehr war *)
- PerOverFlow:Integer; (* Anzahl, wie oft Aufgabe *)
- (* in Periodic gesetzt *)
- (* werden sollte, obwohl *)
- (* die gleiche noch da *)
- (* war und noch nicht *)
- (* bearbeitet *)
-
- Ende:Boolean; (* bei True beendet der *)
- (* Scheduler seine Arbeit *)
-
- BelastungsZaehler:DoppelWort;(* damit kann sehr lange *)
- (* um 1 addiert werden, *)
- (* bevor wieder 0 wird *)
-
- BeginZeit,EndeZeit:Real; (* Diese beiden Zahlen ent- *)
- (* halten die Zeiten zu *)
- (* Beginn und Ende des *)
- (* Scheduling. Die Werte- *)
- (* zuweisung erfolgt im *)
- (* Scheduler. *)
- (* Es folgt jetzt die *)
-
- (* Deklaration aller Pro- *)
- (* zeduren und Funktionen *)
- (* als sogenannte Forwards *)
-
- Procedure InitSchedul; Forward;
- Procedure Schedul; Forward;