Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Übungen zu BS - Dokumentation Aufgabe 6 (WS 2014/15)

Interruptbehandlung für Timerinterrupts. Mehr ...

#include <watch.h>

Klassendiagramm für Watch:
Zusammengehörigkeiten von Watch:

Öffentliche Methoden

bool windup (uint32_t us)
 Uhr "aufziehen".
bool prologue ()
 Enthält den Prolog der Unterbrechungsbehandlung.
void epilogue ()
 In dieser Methode wird der Threadwechsel ausgelöst.
uint32_t interval ()
 Gibt an, welches Unterbrechungsintervall eingestellt wurde.
void activate ()
 Startet den CPU-lokalen Timer.
- Öffentliche Methoden geerbt von Gate
 Gate ()
 Konstruktor.
virtual ~Gate ()
 Destruktor.
bool set_queued ()
 Setzt atomar ein Flag um zu markieren, dass sich das Objekt gerade in einer Epilog-Warteschlange befindet.
void set_dequeued ()
 Setzt das in set_queued() gesetzte Flag zurück.
- Öffentliche Methoden geerbt von QueueEntry< Gate >
Gategetnext ()
 Gibt das nächste Element in der Liste zurück (read-only-Zugriff).

Ausführliche Beschreibung

Interruptbehandlung für Timerinterrupts.

Die Klasse Watch sorgt für die Behandlung der Zeitgeberunterbrechungen, indem sie eine Zeitscheibe verwaltet und gegebenenfalls einen Threadwechsel auslöst.

Dokumentation der Elementfunktionen

void Watch::activate ( )

Startet den CPU-lokalen Timer.

Der CPU-lokale Timer soll mit dem vorab in windup() konfigurierten Interval gestartet werden. Um Timer-Interrupts auf allen CPUs zu erhalten, muss diese Methode pro CPU einmal aufgerufen werden.

uint32_t Watch::interval ( )

Gibt an, welches Unterbrechungsintervall eingestellt wurde.

Rückgabe
Eingestelltes Unterbrechungsintervall
bool Watch::prologue ( )
virtual

Enthält den Prolog der Unterbrechungsbehandlung.

Rückgabe
Gibt true zurück, falls ein Epilog notwendig ist, ansonsten false.

Implementiert Gate.

bool Watch::windup ( uint32_t  us)

Uhr "aufziehen".

Das Watch Objekt muss sich bei der Plugbox anmelden und sich so initialisieren, dass beim Aufruf von Watch::activate() ca. alle us Mikrosekunden regelmäßig Unterbrechungen auslöst werden. Hierfür muss anhand der mit LAPIC::timer_ticks() bestimmten Timerfrequenz ein passender Timer-Divisor bestimmt werden, welcher möglichst klein, aber groß genug ist, um einen Überlauf des 32bit-Zählers auszuschließen. Durch den Aufruf von Watch::interval() soll us wieder abfragbar sein.

Parameter
usGewünschtes Unterbrechungsintervall in Mikrosekunden.
Rückgabe
Gibt an ob das Interval eingestellt werden konnte.

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: