Hallo, habe da mal eine Frage. denke, das ich das so richtig verstanden habe, das wenn Variablen in einer ISR oder in Funktionen als static deklariert werden, diese einen festen Platz im RAM haben. Beim Zugriff auf diese, wird ihr Inhalt immer aus dem RAM gelesen oder abgelegt. Eine Variable die in z.B. einer Funktion nicht als static deklariert ist, wird jedes mal, beim Aufruf dieser Funktion neu angelegt. Muß aber nicht im RAM sein. Wenn ich nun vor der main Funktion eine Variable ohne static deklariere, so ist die als modulglobal zu sehen und defaultmässig static, denke ich. Dieses static wäre hier optional. Muss aber nicht davor. Ist das so richtig? Also: int a = 0; static int b = 0; main() { } Die Variablen a und b sind beide im RAM und werden immer von dort gelesen und geschrieben. Hier ist static nicht zwingend notwendig.
@ Gast (Gast) >Die Variablen a und b sind beide im RAM und werden immer von dort >gelesen und geschrieben. Nein. Sie sind global. Der Compiler kann sie aber auch in Registen halten. Macht er bisweilen auch, darum braucht man volatile, um zwischen ISR und Hauptprogramm zu kommunizieren. Dann werden die Variablen auch nicht zwangsweise im RAM landen, praktisch aber schon. Siehe Interrupt. > Hier ist static nicht zwingend notwendig. Ja. Aber static für Variablen ausserhalb von Funktionen heisst, dass diese nur in dieser Datei sichtbar sind. Andere Funktionen in anderen Dateien können auf sie nicht zugreifen. Also ein "halbglobale" Variable. MFG Falk
Gast schrieb: > int a = 0; > static int b = 0; > > Die Variablen a und b sind beide im RAM und werden immer von dort > gelesen und geschrieben. Hier ist static nicht zwingend notwendig. Wenn es der Compiler für vorteilhaft erachtet, kann eine static-variable auch wegoptimiert werden. Also nicht darauf verlassen, daß sie im Speicher bleibt. Nur volatile kann nicht wegoptimiert werden. hth, Iwan
Hi nicht ganz. Wenn eine Variable außerhalb einer Funktion als static deklariert wird so ist sie nicht außerhalb des Moduls sichtbar. Es kann in zwei Modulen also zweimal die gleich benannte Variable geben. Diese teilen sich dann nicht die gleiche Stelle im RAM. Es handelt sich um zwei komplett unterschiedliche Variablen. Wird eine Variable nicht als static deklariert so ist sie über Modulgrenzen hinweg nutzbar. Deklariert man in einem anderen Modul eine Variable mit gleichem Name so meckert entweder der Linker (sollte er) oder aber diese beiden Variablen teilen sich den gleichen Speicher. Matthias
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.