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

 
 
> volatile указатель
skyv
сообщение Jan 16 2014, 09:16
Сообщение #1


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

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Добрый день.
Вопрос по использованию квалификатора volatile вроде обсуждался, но для себя хочу уточнить.
Имеем регистр аппаратуры, который объявлен в h файле как:
extern volatile unsigned int PORTB.
Как правильно определить аргумент функции в который передается адрес регистра аппаратуры:
- как указатель на переменную типа volatile - unsigned int * volatile ptr;
- как volatile указатель - volatile unsigned int *ptr;
- как volatile указатель на volatile переменную - volatile unsigned int * volatile ptr;
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tarbal
сообщение Jan 17 2014, 00:06
Сообщение #2


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



volatile это инструкция для оптимизатора.

Один из вариантов:
Если переменная не изменяется посредством присваивания, допустим мы в нее что-то один раз записали, а потом только читаем. Можно сделать эквивалентную оптимизацию. Выиграть на чтении и записи в переменную, заменив все чтения подстановкой константы. И все будет прекрасно работать если это переменная в памяти. Однако если это регистр, то такая оптимизация недопустима. Слово volatile предотвращает оптимизацию для переменной, оставляя ее переменной.

Поскольку параметры функции не будут оптимизироваться подобным образом, то писать volatile для параметра не обязательно.

Сообщение отредактировал Tarbal - Jan 17 2014, 00:13
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 11:00
Рейтинг@Mail.ru


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