interrupt service routine

Gast #924604
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
Gast #924608
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 :-))
Gast #924619
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.
#924751
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...
#925304
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
Gast #925315
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren