Глобальные переменные, ёпрст!

Тема в разделе "Arduino & Shields", создана пользователем БольшойМ, 17 фев 2016.

  1. Добрейшего времени суток, форумчане!

    Недавно начал изучать среду Arduino IDE, до этого работал с Мегами через GCC.

    Сразу столкнулся с проблемой, которая не укладывается в мозгях.

    Код (C++):

    int a=0; //Объявляю глобальную переменную

    void setup()
    {
      a=1;
    }

    void loop()
    {
      print(a); //Выводим в Serial либо на LCD, не важно
      //ВЫВОДИТ 0!
      changeblabla(); //Меняем значение переменной в процедуре
      print(a);
      //ВЫВОДИТ ТАКЖЕ 0!
    }

    void changeblabla()
    {
      a=10;
    }
     
    Я чего то не пойму, что за фигня. Или может IDE какой то кривой скачал ...
     
  2. Mestniy

    Mestniy Гуру

    Код (C++):
    int a=0; //Объявляю глобальную переменную

    void setup()
    {
      a=1;
    }

    void loop()
    {
      Serial.println(a); //Выводим в Serial либо на LCD, не важно
      //ВЫВОДИТ 0!
      changeblabla(); //Меняем значение переменной в процедуре
      Serial.println(a);
      //ВЫВОДИТ ТАКЖЕ 0!
    }

    void changeblabla()
    {
      a=10;
    }
     
     
  3. Serial.print или display.println или LCD - не важно!
    Не в этом суть
     
  4. Alex19

    Alex19 Гуру

    Arduino IDE качаем отсюда - https://www.arduino.cc/en/Main/Software.
    Старая привычка использовать для AVR версию 1.0.x, для плат на ARM 1.5.x и выше, не знаю насколько это актуально сейчас. Как-то один раз намучился с 1 библиотекой и привык.

    В чистом виде, данный код работает и с ним не должно быть проблем.
    Код (C++):

    int a = 0; //Объявляю глобальную переменную

    void setup()
    {
      Serial.begin(115200);

      a = 1;
    }

    void loop()
    {
      Serial.println(a);
      changeblabla();
      Serial.println(a);

      // Чтобы не мельтешил экран.
      delay(1000);
    }

    void changeblabla()
    {
      a=10;
    }
    Результат будет 1, 10, 10 ...

    Другое дело, что это кусок кода из какого-то приложения, setup пустой, не видно print. Иногда, такое бывает при выходе за границу массива или аналогичных ошибок работы с памятью. Впрочем Вы и без меня это знаете, раз работали с AVR.

    Запустите мой скетч, если он работает, присмотритесь к своему коду повнимательнее.
     
    Последнее редактирование: 17 фев 2016
  5. Скачал новую версию Arduino IDE 1.6.хх - все проблемы решились.

    На старой IDE, так и не работает. Глобальная переменная не изменяется.
    Версия IDE 1.0.6
    Видимо какая то косячная версия попалась.
     
  6. Alex19

    Alex19 Гуру

    Да именно косячная, у меня версия 1.0.6 основная.

    Удачи!