Frage bezüglich Interrupts

OP (Firma: Uni Heidelberg) #4151352
Lesenswert?
• ▲
▼
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
#4151438
Lesenswert?
• ▲
▼
@ 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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.