Wie macht man das am Elegantesten?
Gruß Chris
Edit: Wie macht man das am Elegantesten, wenn die Funktion dabei fortlaufend aufgerufen wird?
Wie macht man das am Elegantesten?
Gruß Chris
Edit: Wie macht man das am Elegantesten, wenn die Funktion dabei fortlaufend aufgerufen wird?
Geht relativ einfach
Boolean FunctionInitialised = FALSE;
void Function
{
if (FunctionInitialised == FALSE)
{
// initialise function
FunctionInitialised = TRUE;
}
}
Du kannst innerhalb der Funktion eine Variable als "static" deklarieren. Diese behält dann auch zwischen den Aufrufen ihren Wert und Du kannst "zählen" wie oft eine Funktion aufgerufen wurde.
void setup() {
Serial.begin(9600);
}
void loop() {
single();
delay(1000);
}
void single() {
static int count = 0;
if(count == 0) {
Serial.println("erster Aufruf von Single");
count++;
}
Serial.print("single() wurde ");
Serial.print(count);
Serial.println(" mal aufgerufen.");
count++;
}
Die Ausgabe "erster Aufruf von Single" erscheint nur ein Mal, obwohl die Funktion immer wieder aufgerufen wird.
Mario.
Danke, danke.
Gruß Chris
Ein kurzer Hinweis noch zu den globalen Variablen. Man versucht in C sowas gern zu vermeiden, da es sehr schnell zu Überschneidungen der Namen kommen kann. Wenn Du Deine Funktion irgendwann mal woanders einsetzen willst, mußt Du immer daran denken das die gobale Variable dazu gehört. Wenn dann Dein zweites Programm zufällig schon eine solche Variable hat, mußt Du alles umeseln oder noch schlimmer, es fällt erstmal gar nicht auf, weil der Compiler nicht meckert, Dein Programm sich aber seltsam verhält weil FunctionInitialised an anderer Stelle immer wieder verändert wird.
Verwendest Du eine lokale Variable innerhalb der Funktion, dann ist es nicht schlimm, wenn Dein Programm schon eine gleiche, globale Variable hat. Denn die Funktion wird immer die lokale Variable verwenden. Damit wird Code portabler.
Mario.