Forum: Compiler & IDEs Allgemeine Frage C: Lokale Variablen: Funktionen mehrfach aufgerufen


von Jochen (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

Jochen schrieb:
> D.H. die Main-Loop arbeitet mit den gleichen Werten weiter, bevor sie
> unterbrochen wurde und die Int0 genauso ...

ja - so lange die Variablen nicht noch static sind.

von Jochen (Gast)


Lesenswert?

Peter II schrieb:
> nicht noch static sind.

Nein, sind sie nicht.
"static" schließt ja aus, dass diese mehrfach angelegt werden. ;)

von (prx) A. K. (prx)


Lesenswert?

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.

von Jochen (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

Jochen schrieb:
> Kann man das über irgendein Compilerflag deaktivieren?

Ob und wie, das steht in der Doku zu Deinem ungenannten Compiler.

Konkrete Fragen bedürfen erstmal konkreten Angaben.


Peter

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

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.