Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultät Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Echtzeitsysteme
 
  Vorlesungsüberblick
  Voraussetzungen
  Vorlesungsfolien
  Übungen
   Getting Started
   Docs
   Environment
   svn
   Gruppeneinteilung
  Schein, Prüfung
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2005/06  >  EZS  >  Übung  >  Aufgabe 1

Aufgabe: ScheduleTable

Übersicht

Einleitung
Was ist zu tun?
Hinweise

Einleitung

In vielen Aufgabenstellungen kommt es vor, dass gewisse Dinge in bestimmten Abständen periodisch ausgeführt werden müssen. Eine Gruppe solcher Aufgabenstellungen sind z.B. Regelungsprobleme. Mit Sensoren werden regelmäßig eine oder mehrere Größen (z.B. Druck, Temparatur,...) eines Systems gemessen, abhängig von der Abweichung von ihren Sollwerten wird über einen oder mehrere Aktoren versucht, diese Größen wieder auf ihre Sollwerte einzustellen.

pics/regelkreislauf.gif

Ein sehr bekanntes Beispiel für ein Regelungsproblem im Bereich der Echtzeitsysteme ist das sog. Inverse Pendel:

pics/inversespendel.gif

Auf einem Wagen ist ein bewegliches Pendel montiert. Ziel ist es, das Pendel in aufrechter Position zu halten. Dazu ist es notwendig, den Wagen in Abhängigkeit der Abweichung des Pendels von der Senkrechten nach rechts oder links zu beschleunigen. Diese Regelung geschieht, indem in regelmäßigen Abständen der Winkel gemessen wird, den das Pendel mit der Senkrechten einschließt, und anschließend ein Signal an einen Aktor (z.B. ein Motor) gesendet wird, der den Wagen entsprechend beschleunigt.

Für die Abbildung solcher regelmäßig stattfindenden Vorgänge auf ein mikrocontroller-gesteuertes System sind sog. ScheduleTables gut geeignet. Eine ScheduleTable ist nichts anderes als eine Tabelle, die auflistet, zu welcher Zeit bestimmte Aktivitäten ausgeführt werden sollen. Diese Tabelle wird vom Scheduler mit einer bestimmten Periode zyklisch abgearbeitet. Das folgende Beispiel zeigt eine solche Tabelle. Sie enthält insgesamt vier Einträge, die mit einer Periode von 8 ms zyklisch ausgeführt wird. Die Startzeiten der einzelnen Threads beziehen sich dabei auf den Beginn der Tabelle. Die Grafik veranschaulicht die Abfolge der verschiedenen Threads, wie sie zur Laufzeit entsteht.

Thread Startzeitpunkt
T1 1000 µs
T2 3000 µs
T3 4000 µs
T1 6000 µs
pics/schedule.gif

Was ist zu tun?

In dieser Aufgabe soll ein ScheduleTable-Scheduler implementiert werden. Hierfür sind die folgenden, rot eingerahmten Klassen zu implementieren:

pics/classesAufgabe1.gif

FRT

Die Klasse FRT ist die direkte Abbildung des 16-bit Free Running Timers des RCX und implementiert die durch die Schnittstellenklasse Interrupt_Timer vorgegebene Schnittstelle.

Schedule_Table_Entry

Diese Klasse ist einfach das C++-Äquivalent zum Tupel aus Thread und Startzeitpunkt.

Schedule_Table< SIZE > und Abstract_Schedule_Table

Die beiden Klassen Schedule_Table< SIZE > und Abstract_Schedule_Table entsprechen Tabellen, die die Startzeitpunkte der einzelnen Threads enthalten. Die Klasse Schedule_Table< SIZE > wird als C++-Template implementiert, weil es möglich sein soll, Tabellen verschiedener Größe zu erzeugen - ohne dynamische Speicherverwaltung ist dies nur über C++-Templates möglich. Die Template-Implementierung macht aber eine gesonderte abstrakte Schnittstelle notwendig, über die der Scheduler auf die Tabelle zugreifen kann. Diese Schnittstelle stellt die Klasse Abstract_Schedule_Table zur Verfügung.

Schedule_Table_Scheduler und Guarded_Schedule_Table_Scheduler

Die Klasse Schedule_Table_Scheduler stellt die eigentlich Implementierung des Schedulers dar, der den Timer ansteuert und die Tabelle der zu startenden Threads abarbeitet. Die Klasse Guarded_Schedule_Table_Scheduler stellt eine gegen Unterbrechungen geschützte Schnittstelle für den eigentlichen Scheduler zur Verfügung.

Thread

Eine scheduler-spezifische Implementierung eines Threads.

Eine genauere Beschreibung der jeweiligen Klassen und der zu implementierenden Schnittstellen, findet man in der Doxygen-Dokumentation von EZ-Stubs.

Hinweise

  • Zuerst die Dokumentation für den Timer lesen!
  • Die H8/300-CPU besitzt keine Maschinenbefehle um Fließkommazahlen zu verarbeiten, alle benötigten Berechnungen werden daher mit Ganzzahlen durchgeführt.
  • Vorsicht bei Ganzzahlarithmetik!