Smoky 0 22 февраля, 2011 Опубликовано 22 февраля, 2011 · Жалоба Уважаемые коллеги, так я и не понял, в каких случаях переменные объявляются как volatile, а в каких нет. Даже из небольшого моего опыта я понял что их приходится объявлять такими даже в функциях, ибо без этого функция не работает. Однако при изучении примеров таких объявлений в функциях я не заметил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
injen-d 0 22 февраля, 2011 Опубликовано 22 февраля, 2011 · Жалоба Пользуйтесь поиском. volatile объявляется, когда значение переменной может изменяться неизвестным для компилятора способом (например, в прерывании) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 22 февраля, 2011 Опубликовано 22 февраля, 2011 · Жалоба volatile должна быть объявлена любая переменная, которая используется одновременно в обработчике прерывания и еще-где-то в какой-то иной функции. volatile означает, что переменная может изменить свое значение в любой момент времени, что заставляет компилятор, встретив такую переменную, считывать ее содержимое, т.е. эта переменная в оптимизации не участвует. вот, вкратце, и все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 22 февраля, 2011 Опубликовано 22 февраля, 2011 · Жалоба Не только в прерывании и в основной проге, но и в двух разных тредах, если есть ОС. Например в одном треде меняется, в другом анализируется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба А также любой входной порт, таймер и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба а ещё если эта переменная может меняться кодом на ассемблере. Вообще всегда, когда момент изменения значения переменной компилятор Си определить не в стостоянии. Как правильно заметил ViKo, сюда входят и регистры переферии, т.к. их значение меняется аппаратно и компилятор никак не может об этом знать и обязан вычитывать значение из регистров. То-же и с записью. Вот для этого и нужен volatile. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба Благодарю вас, теперь в основном всё понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться