Allgemeine Frage C: Lokale Variablen: Funktionen mehrfach aufgerufen

Gast #2662990
Hallo zusammen!

Nur eine Frage um sicher zu sein, keinen Denkfehler zu haben:
In einer Funktion werden lokal Variablen deklariert.
Diese Funktion kann mehrfach aufgerufen werden. (Main-Loop und 
Interrupts, wobei Nested Interrupts zugelassen sind).

Angenommen die Funktion wird dreimal in Folge unterbrochen:
Int0 unterbricht Main-Loop, Int1 unterbricht Int0

Da die lokalen Variablen auf dem Stack liegen, werden die gesetzen Werte 
eine Funktion von der anderen nicht beeinflusst, oder?!?
D.H. die Main-Loop arbeitet mit den gleichen Werten weiter, bevor sie 
unterbrochen wurde und die Int0 genauso ...

Viele Grüße
Jochen

P.S.:
Es handelt sich hier um einen Single Core Mikrocontroller.
#2663099
Jochen schrieb:

> Da die lokalen Variablen auf dem Stack liegen, werden die gesetzen Werte
> eine Funktion von der anderen nicht beeinflusst, oder?!?

Komplizierter wird es, wenn Hauptprogramm und Interrupt-Handler die 
gleiche Funktion aufrufen. Theoretisch ist das kein Problem, aber man 
sollte das Handbuch des Compilers dennoch eingehend studieren. Denn es 
gibt Controller, die sich mit einem Stack für Variablen etwas schwer tun 
und die Compiler der Effizienz halber Variablen implizit statisch 
anlegen. Kommt bei beispielsweise bei 8051 und 8-Bit PICs vor.
Gast #2665992
A. K. schrieb:
> Komplizierter wird es, wenn Hauptprogramm und Interrupt-Handler die
> gleiche Funktion aufrufen.

Davon spreche ich ja die ganze Zeit, dass das der Fall ist ... ;)

A. K. schrieb:
> und die Compiler der Effizienz halber Variablen implizit statisch
> anlegen.

Kann man das über irgendein Compilerflag deaktivieren?
Persönliche Seite #2666121
A. K. schrieb:
> Jochen schrieb:
>
>> Da die lokalen Variablen auf dem Stack liegen, werden die gesetzen Werte
>> eine Funktion von der anderen nicht beeinflusst, oder?!?

Ja.

> Komplizierter wird es, wenn Hauptprogramm und Interrupt-Handler die
> gleiche Funktion aufrufen. Theoretisch ist das kein Problem, aber man
> sollte das Handbuch des Compilers dennoch eingehend studieren. Denn es
> gibt Controller, die sich mit einem Stack für Variablen etwas schwer tun
> und die Compiler der Effizienz halber Variablen implizit statisch
> anlegen.

Wenn GCC verwendet wird — was der Name der Forums vermuten lässt — dann 
werden keine Variablem implizit statisch angelegt.

Das gilt zumindest für den offiziellen GCC, weil ansonsten Programm eben 
nicht mehr reentrant-fähig sind.

Ob private Ports wie zB von MircoChip dahingehend aufgebohrt wurden, 
kann ich nicht sagen, da musst dann den entsprechenden Support fragen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.