Forum: Mikrocontroller und Digitale Elektronik interrupt service routine


von duron005 (Gast)


Lesenswert?

Hallo zusammen,

Bevor ich da anfangen testprogramme zu schreiben.
kann mir jemand sagen, was passiert wenn sich der kontroler in der ISR 
befindet und ein erneuter interrupt (der gleiche interupt, der in die 
ISR führte) ausgeloest wird? Startet die ISR dann wieder von anfang der 
ISR?

danke und lg

von 3365 (Gast)


Lesenswert?

In einer ISR sind Interrupts ueblicherweise gesperrt.

von Haku (Gast)


Lesenswert?

Kommt drauf an... der AVR wird nach Betreten einer ISR sofort alle 
Interrupts (alle!) sperren. Wenn du die von Hand in der ISR wieder 
freigibst, kannste natürlich sofort wieder in irgendwelche ISRs 
reinlaufen (und evtl. auch Stacküberläufe produzieren :-))

von duron005 (Gast)


Lesenswert?

Und wenn ich mich in der ISR der USART befinde, kommt ein ISR des Timers 
durch?

lg

von duron005 (Gast)


Lesenswert?

aha ok, ich muss also in der ISR der USART die interupts des timers 
wieder freigeben?

von crazy horse (Gast)


Lesenswert?

nein, nicht die des Timers, sondern das (globale) I-flag im PSW.
Bei UART-Interrupt ist zumindest zeitlich ziemlich unkritisch, aber du 
solltest schon verstehen, was du tust.

von duron005 (Gast)


Lesenswert?

ok danke für eure antworten...ich denke ich weiß jetzt was ich zu tun 
habe:)

lg

von crazy horse (Gast)


Lesenswert?

Na, dann viel Erfolg.
Denk aber hauptsächlich an den Stack, insbesondere, wenn du in C (oder 
einer anderen Hochsprache) programmierst.
Je nachdem, was alles gesichert wird beim Eintritt in eine ISR (manche 
Compiler gehen da blind mit dem grossen Besen drüber) kann das 
insbesondere bei wenig freiem RAM ins Auge gehen, und der Compiler gibt 
nicht mal ne Warnung aus, weiss ja nicht, dass doppelt gesichert wird. 
Und immer vom worst-case ausgehen, also beide Interrupts in max. 
Schachtelungstiefe des Hauptprogramms - was passieren kann, passiert 
auch irgendwann. Schwer zu finden, so eine Fehlfunktion, die alle paar 
Tage oder Wochen auftritt. Schiebt man dann meist erstmal der 
Stromversorgung und/oder ESD-Einflüssen zu.

von duron005 (Gast)


Lesenswert?

jetzt ist mir aber doh noch etwas eingefallen.
wenn ich in der ISR der USART bin, und erneut ein solcher interrupt 
ausgeloest wird? was passiert dann eigentlich?

von Rahul D. (rahul)


Lesenswert?

>was passiert dann eigentlich?

Er wird ignoriert. Das sollte aber nie passieren, weil man in ISR nicht 
so viel Programm stehen haben sollte, dass die ISR zu lange braucht.

>was passiert dann eigentlich?
Wenn du den Code dann hier wegen eines Fehlers reinstellst, kann es zur 
Schelte kommen...

von Gast (Gast)


Lesenswert?

Wenn du den Code dann hier wegen eines Fehlers reinstellst, kann es zur
Schelte kommen...

LOL... der war gut... X-D

von Falk B. (falk)


Lesenswert?


von Peter D. (peda)


Lesenswert?

duron005 wrote:
> aha ok, ich muss also in der ISR der USART die interupts des timers
> wieder freigeben?

Kawoum und schon hast Du Deinen Stack abgeschossen.

Der UART-Interrupt löscht nicht das Interruptflag!
Du mußt also erstmal den UART-Interrupt disablen, ehe Du den globalen 
Interrupt wieder freigeben kannst.


In der Regel ist es aber günstiger, wenn der UART-Interrupt die Bytes 
erstmal schnell in einen FIFO schreibt.
Dann kann das Main die Bytes in Ruhe auswerten und andere Interrupts 
werden nicht verzögert.

Beitrag "AVR-GCC: UART mit FIFO"


Peter

von Jäger des gefährlichen Halbwissens (Gast)


Lesenswert?

Seid ihr wahnsinnig? Man empfielt einsteigern nicht, in irgendeiner ISR 
die interrupts wieder freizugeben, man sollte diese Möglichkeit gar 
nicht erst erwähnen!
Das scheint einfach zu verlockend, und ist für Anfänger aber kaum zu 
durchblicken was da passiert. In 99,9% der Fälle ist es auch gar nicht 
nötig, verschachtelte Interrupts zu konstruieren.

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.