Перейти к содержанию
    

Объявление переменных volatile

Уважаемые коллеги, так я и не понял, в каких случаях переменные объявляются как volatile, а в каких нет. Даже из небольшого моего опыта я понял что их приходится объявлять такими даже в функциях, ибо без этого функция не работает. Однако при изучении примеров таких объявлений в функциях я не заметил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пользуйтесь поиском.

 

volatile объявляется, когда значение переменной может изменяться неизвестным для компилятора способом (например, в прерывании)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

volatile должна быть объявлена любая переменная, которая используется одновременно в обработчике прерывания и еще-где-то в какой-то иной функции. volatile означает, что переменная может изменить свое значение в любой момент времени, что заставляет компилятор, встретив такую переменную, считывать ее содержимое, т.е. эта переменная в оптимизации не участвует. вот, вкратце, и все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А также любой входной порт, таймер и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а ещё если эта переменная может меняться кодом на ассемблере. Вообще всегда, когда момент изменения значения переменной компилятор Си определить не в стостоянии.

Как правильно заметил ViKo, сюда входят и регистры переферии, т.к. их значение меняется аппаратно и компилятор никак не может об этом знать и обязан вычитывать значение из регистров. То-же и с записью.

Вот для этого и нужен volatile.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...