Go Down

Topic: Bei Funktionsaufruf etwas einmalig ausführen (Read 922 times) previous topic - next topic

Chris72622

Apr 23, 2014, 07:04 am Last Edit: Apr 23, 2014, 07:13 am by Chris72622 Reason: 1
Wie macht man das am Elegantesten?

Gruß Chris

Edit: Wie macht man das am Elegantesten, wenn die Funktion dabei fortlaufend aufgerufen wird?
Bilnk wtiohut daley.

gloob

Geht relativ einfach

Code: [Select]

Boolean FunctionInitialised = FALSE;

void Function
{
    if (FunctionInitialised == FALSE)
    {
         // initialise function
         FunctionInitialised = TRUE;
    }
}


mkl0815

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.
Code: [Select]

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.

Chris72622

Bilnk wtiohut daley.

mkl0815

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.

Go Up