Allgemeine Frage C: Lokale Variablen: Funktionen mehrfach aufgerufen

Gast #2662990
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.
#2663099
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.
Persönliche Seite #2666121
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren