www.mikrocontroller.net

Forum: GCC Allgemeine Frage C: Lokale Variablen: Funktionen mehrfach aufgerufen


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Peter II schrieb:
> nicht noch static sind.

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

Autor: A. K. (prx)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net