Was passiert bei doppeltem Fkt.-Aufruf durch nen INT?

Gast #177053
Der Linker legt doch fest, wo im RAM die Variablen einer Funktion
platziert werden (oder?).

Angenommen, ein Interrupt tritt auf, während man in einer Funktion mit
lokalen Variablen ist und dieser Interrupt dann dieselbe Funktion quasi
nochmal aufruft.

Werden die Variablen nun kaputt-überschrieben? Auf den Stack gerettet
und zuletzt wiederhergestellt? Zusätzlicher Satz von Variablen für die
INT-Routine irgendwo angelegt? Oder wie nun wirklich?

..für's Verständnis sowieso und um ggf. entsprechende Maßnahmen
ergreifen zu können interessant.
Gast
Lokale Variablen sind auf dem Stack.

Nur globale und statische Variablen sind gefährdet.

Funktionen aus ISRs heraus aufzurufen ist aber unklug, da die ISR dann
viel mehr Register retten muß, als wenn Du sie gleich sehr einfach
hälst.
Gast
Alles klar, weiß ich Bescheid, auch den Nachteil mit viel retten. Ist
aber keine Zeitkritische Angelegenheit, (Stack-)Speicher mit ordentlich
Reserve vorhanden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.