Forum: Mikrocontroller und Digitale Elektronik Rcall im Interrupt erlaubt?


von R--- S. (rene66)


Lesenswert?

hallo,

Controller Mega 16 in asm.

Sind Unterprogrammaufrufe in Interrupts erlaubt die mit ret enden oder 
was sollte man beachten?

von Sven P. (Gast)


Lesenswert?

Aber sicher sind die erlaubt.

von Jochen M. (taschenbuch)


Lesenswert?

Klar sind die erlaubt.

Ein sehr beliebter Fehler ist es aber, in der gecallten Routine dann 
globale Register zu ändern, die nicht gesichert wurden.
Immer daran denken, dass Du während der Bearbeitung der gecallten 
Routine ja  noch im Interrupt bist!
Sonst gibt es keinerlei Einschränkungen.


Gruss
Jochen Müller

von Peter D. (peda)


Lesenswert?

Jochen Müller wrote:
> Ein sehr beliebter Fehler ist es aber, in der gecallten Routine dann
> globale Register zu ändern, die nicht gesichert wurden.

Noch ein beliebter Fehler ist, eine Funktion aufzurufen, die auch das 
Main benutzt.
Diese Funktionen müssen reentrant geschrieben sein.
Einfacher ist es daher oft, diese Funktion zweimal zu schreiben.

Aber Funktionen, die die gleichen Hardwareressourcen benutzen, kann man 
prinzipiell nicht im Interrupt und Main aufrufen, z.B. UART-Ausgabe.
Das gibt dann nen hübschen Byte-Salat.


Peter

von Besserwisserle (Gast)


Lesenswert?

Und auch ein Auge auf den Stack haben, der wird zusätzlich belastet.

von Fred (Gast)


Lesenswert?

Hi,

prinzipiell ist's wohl möglich (haben ja auch die anderen schon 
geschrieben). Allerdings sollte man zusätzlich zu den genannten Punkten 
auch den Zeitaufwand der aufgerufenen routinen bedenken. Generell sollte 
ein Interrupt so kurz wie möglich sein, also vielleicht mal schaun, ob 
man da nicht einfach ein Bit setzt/löscht und die routine dann aus der 
main aufruft.
Gruß

Fred

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.