Forum: Mikrocontroller und Digitale Elektronik Interrupt programmierung


von schlumpf (Gast)


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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Lutz (Gast)


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.

von Reinhard Kern (Gast)


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

von Falk B. (falk)


Lesenswert?

Siehe Interrupt

von Klaus B. (Gast)


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

von schlumpf (Gast)


Lesenswert?

ok, danke an alle

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
Noch kein Account? Hier anmelden.