Reference   Language | Libraries | Comparison | Changes

Static

Das Keyword 'static' wird benutzt, um einer Funktion eine Variable zu geben, die nur dort sichtbar ist und zusätzlich auch zwischen Funktionsaufrufen ihren Wert beibehält. Diese Variable hat auch nur eine feste Adresse welche bei jedem Funktionsaufruf gleich bleibt.

Im Vergleich dazu werden normale lokale Variablen jedesmal erzeugt, wenn die Funktion aufgerufen wird und am Ende auch wieder gelöscht.

Static Variablen werden zum ersten und einzigen Mal erzeugt, wenn die Funktion zum ersten mal aufgerufen wird.

Beispiel



/* RandomWalk
* Paul Badger 2007
* RandomWalk wanders up and down randomly between two
* endpoints. The maximum move in one loop is governed by
* the parameter "stepsize".
* A static variable is moved up and down a random amount.
* This technique is also known as "pink noise" and "drunken walk".
*/

#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;

int thisTime;
int total;

void setup()
{
  stepsize = 5;
  Serial.begin(9600);
}

void loop()
{        //  test randomWalk function
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
  delay(10);
}

int randomWalk(int moveSize){
  static int  place;     // variable to store value in random walk - declared static so that it preserves
                         // its values between function calls, but no other functions can change its value

  place = place + (random(-moveSize, moveSize + 1));

  if (place < randomWalkLowRange){                    // check lower and upper limits
    place = place + (randomWalkLowRange - place);     // reflect number back in positive direction
  }
  else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // reflect number back in negative direction
  }

  return place;
}


Reference Home

Corrections, suggestions, and new documentation should be posted to the Forum.

The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.

Share