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.
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.
Peter II schrieb: > nicht noch static sind. Nein, sind sie nicht. "static" schließt ja aus, dass diese mehrfach angelegt werden. ;)
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.
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.