PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : static beisst volatile



StefPan
30.09.2006, 14:26
Hallo Zusammen!

Ich habe im Wiki Beispiel: Hallo Welt für AVR (LED blinken)
eine Funktionsdefinition :static volatile uint16_t irq_count = 0;
gelesen ...

Was volatile macht, ist klar: vor Lesen der Variable immer neu holen, da ja im Interrupt verändert werden könnte.

Aber die Kombination static volatile verstehe ich nicht.

Static soll doch eigentlich die Unveränderbarkeit garantieren ...

Und dann allgemein, was sollen die static - Definitionen von Funktionen im uC- Bereich?

SIGINT
30.09.2006, 15:53
Ich hab beim googlen folgendes gefunden:
http://de.wikibooks.org/wiki/C-Programmierung:_static_&_Co.

Gruß,
SIGINT

StefPan
01.10.2006, 10:37
Mein Satz - Static soll doch eigentlich die Unveränderbarkeit garantieren -
ist natürlich schmarn gewesen. Habe static mit const verwechselt - pfeifel

Danke an Sigint - gute Info:

Auch vor Funktionen kann das Schlüsselwort static stehen. in diesen Fall bedeutet dieses, dass die Funktion nur im Rahmen der Datei, in welcher die Funktion steht, genutzt werden kann.

Aha - das ist so zu verstehen, wie die private Definition bei bei C++, eben bezogen auf eine c-Datei.

Zu meiner Frage:

static volatile uint16_t irq_count = 0;

das static ist also Quatsch - wenn die Deklaration außerhalb einer Funktion - also global definiert wird. Macht nur Sinn innerhalb einer Funktion.
Oder bringt das irgendwelche Vorteil im uC-Bereich?

Innerhalb einer Funktion wäre static richtig, sozusagen als permanenter Funktionsspeicher mit Inhaltsbehalt, aber dann ist die Variable außerhalb ja nicht bekannt, daran ändert auch das volatile nichts!

Habe ich das richtig verstanden?

Gruß
Stefan

SprinterSB
02.10.2006, 17:54
Static soll doch eigentlich die Unveränderbarkeit garantieren ...

Und dann allgemein, was sollen die static - Definitionen von Funktionen im uC- Bereich?

Nö, wenn es unveränderlich sein soll sagt man "const".

Mehr findest du im C-Tutorial:
[wiki="C-Tutorial#Speicherklassen]

https://www.roboternetz.de/wissen/index.php/C-Tutorial#Speicherklassen