Hallo Ole,
ISRs haben ganz allgemein mit dem Problemchen zu tun, dass sie die
Variablen des Hauptprogramms nicht überschreiben dürfen. In der NIOS HAL
ist das so gelöst, dass jede ISR zur Laufzeit beim Interrupt-Handler
registriert werden muss. Für diese Registrierung definiert man eine
Struktur mit allen für die ISR benötigten Elementen und legt eine
Variable davon an. Manchen ISR reicht auch eine einzelne int Variable.
Den Zeiger auf die Variable gibt man beim Registrieren mit.
Wenn nun der Interrupt eintritt, dass übernimmt zunächst der
Interrupt-Handler die Kontrolle, der dann die ISR aufruft und ihr den
Zeiger auf "ihre" Variable übergibt. Im Beispiel ist das nur eine int
Variable. Und die Zeile
volatile int* edge_capture_ptr = (volatile int*) context;
ist nichts anderes als eine Variablendefinition mit Initialisierung und
type cast um zu sagen: Die Adresse der volatile int Variablen
edge_capture_ptr ist gleich dem ersten Aufrufparameter.
Grüße,
Harald