Можно ли влиять на while локальной переменной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, недавно сел на си и в общем-то использую си для AVR МК ATMEGA. Пока в этом не силён. Проблема заключается в том, что у нас есть два мк атмега8 и между ними мост для передачи битов. В итоге мне приходится ждать в цикле пока глобальная переменная не изменит своё значение. Но что-то при изменении её (я вижу это на индикаторе осциллоскопа) ничего происходит, цикл остаётся по-прежнему активным. Ах да, схема представлены на протеус 7. Короче, может ли на цикл while влиять глобальная переменная? Думаю понятно поставил вопрос. P.S. Ппц, в загаловке темы нельзя писать слово "помощь". А как же "при помощи", "с помощью"?
Глобальную переменную*
Пока дождёшься ответа, уже и книжку прочтёшь). НО мне подсказали. В общем ответ: (ЦИТАТА) " Сделайте её volatile Например, volatile int i; Компилятор видит, что в коде цикла она не меняется и не добавляет проверку в целях оптимизации."
Обрати внимание на директиву «volatile». Сейчас я тебе расскажу про очень популярную ошибку среди новичков, чтобы ты ее не повторял. Дело в том, что у компилятора Си очень хитрый оптимизатор, но им надо уметь пользоваться. Если в коде встречается условие, которое ну никак не выполнится, по мнению компилятора, то оптимизатор легко может вырезать его из программы. Такое условие, например, – изменение переменной, которая не меняется в коде программы. Но ведь эта глобальная переменная может изменяться по прерыванию! Вот директива «volatile» и указывает именно на то, что переменная может непроизвольно изменяться внешними силами.

Решение задачи: «Можно ли влиять на while локальной переменной»

textual
Листинг программы
int val = 1;
...
while (val) {
    ...
    if (expression)
        val = !val;
}

Объяснение кода листинга программы

  1. Объявлена переменная типа int с именем val и инициализирована значением 1.
  2. В цикле while выполняется условие, где переменная val проверяется на ненулевое значение.
  3. Внутри цикла while выполняется блок кода, который может содержать операторы и другие конструкции.
  4. Внутри цикла while проверяется условие expression, если оно истинно, то выполняется оператор val = !val;.
  5. Операция val = !val; меняет значение переменной val на противоположное.
  6. Цикл while выполняется до тех пор, пока значение переменной val не станет равным нулю.
  7. После окончания цикла while выполняются операции, которые находятся после него в коде.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы