hallo, Controller Mega 16 in asm. Sind Unterprogrammaufrufe in Interrupts erlaubt die mit ret enden oder was sollte man beachten?
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
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
Und auch ein Auge auf den Stack haben, der wird zusätzlich belastet.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.