реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Объявление переменных volatile
Smoky
сообщение Feb 22 2011, 18:27
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



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


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post
injen-d
сообщение Feb 22 2011, 18:40
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



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

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


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
ARV
сообщение Feb 22 2011, 18:40
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Feb 22 2011, 18:53
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 23 2011, 07:31
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



А также любой входной порт, таймер и т.д.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Feb 23 2011, 08:17
Сообщение #6


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



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


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Smoky
сообщение Feb 23 2011, 10:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



Благодарю вас, теперь в основном всё понятно.


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01319 секунд с 7
ELECTRONIX ©2004-2016