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

Interruptbehandlung für Timerinterrupts. Mehr ...

#include <device/watch.h>

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

Öffentliche Methoden

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

Weitere Geerbte Elemente

- Öffentliche Attribute geerbt von Gate
QueueLink< Gatequeue_link
 Verkettungszeiger für Epilog Queue.
 

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

◆ activate()

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.

Noch zu erledigen:
Methode implementieren

◆ epilogue()

void Watch::epilogue ( )
virtual

In dieser Methode wird der Threadwechsel ausgelöst.

Noch zu erledigen:
Methode implementieren

Erneute Implementation von Gate.

◆ interval()

uint32_t Watch::interval ( )

Gibt an, welches Unterbrechungsintervall eingestellt wurde.

Rückgabe
Eingestelltes Unterbrechungsintervall
Noch zu erledigen:
Methode implementieren

◆ prologue()

bool Watch::prologue ( )
virtual

Enthält den Prolog der Unterbrechungsbehandlung.

Rückgabe
Gibt true zurück, falls ein Epilog notwendig ist, ansonsten false.
Noch zu erledigen:
Methode implementieren

Implementiert Gate.

◆ windup()

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.
Noch zu erledigen:
Methode implementieren

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