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?
Sag deinem Lehrer, dass wir gesagt haben, dass er euch das erklären soll. Wenn er das nicht macht, kommen wir vorbei!
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.
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.
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
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
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.