Hallo, ich habe eine kleine Frage zu Interrupts. Infos: Ich benutze das DE0 Board von Altera, arbeite mit NIOS II und die Programmiersprache ist C. Aktueller Stand meines Codes: Grob erklaert, ich habe eine main() und dort ist eine while(1) schleife. In der while-Schleife ist ein Automat mit eigenem Typedef implementiert. Nun meine Frage: In jedem Switch-Case gibt es ein Ereignis bzw. es werden einige Methoden aufgerufen und oder paar LED's angesteuert, je nach Case-Fall. Ich möchte gerne die Ereignisse die im Case-Konstrukt ausgeführt werden gerne auslagern in einer Interruptserviceroutine. Die States bzw. Case-Faille werden durch drücken von Buttons gewechselt. Mein Problem: Woher soll die ISR wissen in welchem Case-Fall ich bin und das dazu passende Ereignis ausführen? Gibt es die möglichkeit für 1 Button mehrere ISR's zu schreiben und diese irgendwie zu unterscheiden? Wuerde das mit den folgenden Methoden gehen? void alt_irq_register(irNr, (void *) contextPtr, (void *) devPtr); Hfft versteht man meine Frage, habe so gut wie möglich beschrieben. Hoffe auf eine kleine Hilfe und oder ein Rat. Vielen Dank im voraus! :) Lg
@ Kiko Kilian (Firma: Fh-Koeln) (kiko92) >In jedem Switch-Case gibt es ein Ereignis bzw. es werden einige Methoden >aufgerufen In C gibt es keine Methoden, nur stinknormale Funktionen. > und oder paar LED's angesteuert, je nach Case-Fall. WOW! Da kann so ein SoC ja voll seine Qualitäten ausspielen ;-) >Ich möchte gerne die Ereignisse die im Case-Konstrukt ausgeführt werden >gerne auslagern in einer Interruptserviceroutine. Warum? Sind sie sooooo zeitkritisch? >Die States bzw. Case-Faille werden durch drücken von Buttons gewechselt. Also lahmes Zeug. Also lass es wie es ist. >Woher soll die ISR wissen in welchem Case-Fall ich bin und das dazu >passende Ereignis ausführen? Globale Variable, welche volatile ist. Siehe Interrupt. >Gibt es die möglichkeit für 1 Button mehrere ISR's zu schreiben und >diese irgendwie zu unterscheiden? Ja, aber das ist reichlich unsinnig. Mach eine einfache Fallunterscheidung in der ISR. >Wuerde das mit den folgenden Methoden gehen? >void alt_irq_register(irNr, (void *) contextPtr, (void *) devPtr); Du denkst viel zu kompliziert. K I S S!! http://de.wikipedia.org/wiki/KISS-Prinzip
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.