помощь в расшифровке части кода

Тема в разделе "Arduino & Shields", создана пользователем MESS, 26 фев 2014.

  1. MESS

    MESS Гик

    Скетч большой и даже выполняется, но не могу самостоятельно понять эту его часть:
    //**************
    char state = 1;
    int loww = 3;

    //********************

    void State(byte state)
    {
    if(state)
    {
    static char flag = 0; //......
    if(state == 2) //.......
    {
    loww += flag; //.......
    Display();
    Serial.println(loww);
    flag = 0;
    }
    else if(state == 1) flag = 1;
    else if(state == 3) flag = -1;
    Просьба расшифровать помеченные строки. Благодарю заранее.
     
  2. geher

    geher Гуру

    static char flag = 0; //......
    При объявлении переменной в функции, ключевое слово static указывает, что переменная сохраняет свое состояние между вызовами этой функции. при этом видимость переменной только внутри функции.
    Полагаю, что в ардуиновском языке С так же. В данном случае переменная при запуске программы инициализируется нулем, а при вызовах функции State сохраняет свое значение.
    if(state == 2) //....... серия условий (можно было бы использовать switch), в зависимости от значений параметра функции state устанавливается значение переменной flag:
    При этом в случае state == 2 в глобальной переменной loww накапливаются колебания значений переменной flag.
    loww += flag; //.......
    Текущее значение flag добавляется к loww. Значение loww при запуске программы равно 3, и в процессе выполнения при каждом вызове функции State то увеличивается на 1, то уменьшается на 1, то "замирает".

    При этом следует понимать, что глобально объявленная переменная state и параметр функции state - разные сущности. Внутри функции будет виден параметр (по крайней мере в теории, пока не доводилось проверять. что на этот счет полагает компилятор Arduino IDE), вне ее будет видна глобальная переменная.
     
    MESS нравится это.
  3. MESS

    MESS Гик

    Спасибо! после работы буду вникать