static

Описание

Ключевое слово static используется для создания переменных, которые будут видны только одной функции. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, переменные static сохраняют свое значение между вызовами.

Переменные, объявленные как static, создаются и инициализируются только при первом вызове функции.


Пример

/* RandomWalk в случайном порядке перемещается вверх или вниз между двумя
* точками. Длина максимального перемещения за один цикл задается 
* параметром "stepsize".
* Статическая переменная увеличивается или уменьшается на случайную величину.
* Эта техника также известна как "розовый шум" или "пьяная походка".
*/
 
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
 
int thisTime;
int total;
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{ 
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
  delay(10);
}
//  функция randomWalk 
int randomWalk(int moveSize)
{
  // переменная для хранения величины случайного перемещения - объявлена как static, поэтому
  // сохраняет свое значение между вызовами функции. При этом другие функции не могут ее изменить
  static int place; 
 
  place = place + (random(-moveSize, moveSize + 1));
 
  if (place < randomWalkLowRange) // проверка нижнего и верхнего пределов
  {
    place = place + (randomWalkLowRange - place); // восстановление числа в положительном направлении
  }
  else if(place > randomWalkHighRange)
  {
    place = place - (place - randomWalkHighRange); // восстановление числа в отрицательном направлении
  }
 
  return place;
}

Расскажи о нас

Сообщение

Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.