Ключевое слово static используется для создания переменной, которая видна только одной функции. Однако в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, статические переменные остаются после вызова функции, сохраняя свои значения между её вызовами.
Переменные, объявленные как static, создаются и инициализируются только при первом вызове функции..
Пример
/* RandomWalk
* Paul Badger 2007
* RandomWalk ("Случайное блуждание") программа случайно перемещается между двумя точками
* Максимальное перемещение задается параметром "stepsize".
* Static переменная place изменяет свое значение на случайную величину.
* Эту технику иногда называют "pink noise" ("розовый шум") или "drunken walk" ("пьяная походка").
*/
#define randomWalkLowRange -20 //нижняя граница
#define randomWalkHighRange 20 //верхняя граница
int stepsize;
int thisTime;
void setup()
{
Serial.begin(9600);
}
void loop()
{
stepsize = 5;
thisTime = randomWalk(stepsize);
Serial.println(thisTime);
delay(10);
}
int randomWalk(int moveSize){
static int place=0; // переменная сохраняет значение между вызовами функции
// другие функции не могут изменять значение этой переменной
//также происходит первичная инициализация
place = place + (random(-moveSize, moveSize + 1));
if (place < randomWalkLowRange){ // проверяем выхождение за границы
place =randomWalkLowRange; // если "выскочили" то делаем ограничиваем
}
else if(place > randomWalkHighRange){
place = randomWalkHighRange; // если "выскочили" то делаем ограничиваем
}
return place;
}
Справочник
Материалы взяты с официального сайта проекта Arduino и представлены по лицензии Creative Commons Attribution-ShareAlike 3.0 License.
Источник: http://arduino.cc/en/Reference/Static |