www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt programmierung


Autor: schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir nehmen in der Schule gerade das Thema Interrupts durch.
Wir programmieren in C. Verwendet wird ein µC von Infinion.

So jetzt zur eigendlichen Frage. Bis jetzt haben wir alles in Funktionen 
programmiert und diese in main aufgerufen oder eben direkt alles in main 
programmiert.

Jetzt meint mein Lehrer das alles nur noch in diesen Interruptfunktionen 
programmiert werden soll. Heißt das im main programm nichts mehr 
passiert.

Ich verstehe den sinn davon nicht ganz. Warum jetzt das programm nur 
noch aus den Interrupt funktionen besteht.
Wird das in der praxis auch so gemacht? Hat was irgendwelche vorteile?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag deinem Lehrer, dass wir gesagt haben, dass er euch das erklären 
soll. Wenn er das nicht macht, kommen wir vorbei!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schlumpf schrieb:

> Jetzt meint mein Lehrer das alles nur noch in diesen Interruptfunktionen
> programmiert werden soll. Heißt das im main programm nichts mehr
> passiert.

Sag deinem Lehrer einen schönen Gruß.
Er soll mal bei uns vorbei schauen. Dann erklären wir ihm, wie man das 
wirklich macht.

> Warum jetzt das programm nur
> noch aus den Interrupt funktionen besteht.
> Wird das in der praxis auch so gemacht?

Nein. Natürlich nicht.

Das Problem: Man kann das nicht so pauschal sagen. Einige Dinge werden 
in den Interruptfunktionen gemacht, andere werden weiterhin in der main 
gemacht.
Interrupt Funktionen sollen vor allen Dingen eines sein: kurz.
Das heißt jetzt allerdings auch wieder nicht, dass in den 
Interruptfunktionen gar nichts mehr passieren soll. In einer ISR macht 
man die Dinge, die man unbedingt machen muss und nicht mehr. Alles was 
nicht zeitkritisch ist bzw. man nicht sicherstellen muss, dass es in 
einem Aufwasch abgearbeitet werden muss, wird über Jobflags erledigt. 
Jobflags bedeutet: in der main werden in der Hauptschleife alle 
vorhandenen Jobflags ständig durchgesehen und wenn signalisiert wird (zb 
von einer ISR) das etwas zu machen ist, dann wird das in der 
Hauptschleife erledigt.

Aber grundsätzlich: Du willst so schnell wie möglich aus der Behandlung 
des Interrupts wieder raus. Daher auch die Forderung: In einer ISR macht 
man das absolut Notwendige. Alles andere kann warten, bis die 
Hauptschleife Zeit hat.

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schlumpf schrieb:
> Heißt das im main programm nichts mehr
> passiert.
>
> Ich verstehe den sinn davon nicht ganz. Warum jetzt das programm nur
> noch aus den Interrupt funktionen besteht.

Ist halt eine Philosophiefrage, eine Art, wie etwas abgearbeitet werden 
soll. Eine Endlosschleife in main (natürlich mit sleepmode), ansonsten 
macht der µC nur was, wenn ein Interrupt das anfordert. Das aber so 
alles in die ISR auszulagern, ist nur unter ganz wenigen Umständen 
sinnvoll. Es bleibt immer die Regel gültig: Die ISR sollte so kurz wie 
nur möglich sein.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schlumpf schrieb:
> Ich verstehe den sinn davon nicht ganz. Warum jetzt das programm nur
> noch aus den Interrupt funktionen besteht.
> Wird das in der praxis auch so gemacht? Hat was irgendwelche vorteile?

Vorab, in der Praxis wird alles gemacht, auch alles Falsche.

Sinnvoll ist es, mit Interrupts alles abzuarbeiten, was sofort geschehen 
muss, z.B. Datenempfang, bevor das nächste Zeichen kommt. Sozusagen den 
Echtzeit-Anteil.

In main erledigt man das, was Zeit hat, z.B. Benutzer-Eingaben.

Ich empfange z.B. Daten per IRQ und schreibe sie in einen Buffer, bis 
eine Message komplett ist. Die übergebe ich dann an main zur Auswertung 
(z.B. indem ich ein Flag msg_ready setze).

Gruss Reinhard

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Interrupt

Autor: Klaus B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich denke, es geht dem Lehrer einfach darum, daß die Funtkionsweise von 
Interrupts verstanden wird. Da ist es erst einmal egal, ob dies mit 
konkretem Code sinnvoll ist oder nicht...

Gruß,
Klaus

Autor: schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke an alle

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.