Можно ли влиять на 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; }
Объяснение кода листинга программы
- Объявлена переменная типа int с именем
val
и инициализирована значением 1. - В цикле while выполняется условие, где переменная
val
проверяется на ненулевое значение. - Внутри цикла while выполняется блок кода, который может содержать операторы и другие конструкции.
- Внутри цикла while проверяется условие
expression
, если оно истинно, то выполняется операторval = !val;
. - Операция
val = !val;
меняет значение переменнойval
на противоположное. - Цикл while выполняется до тех пор, пока значение переменной
val
не станет равным нулю. - После окончания цикла while выполняются операции, которые находятся после него в коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д