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

 
 
> 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
Ответов
msalov
сообщение Jan 16 2014, 09:44
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Вы немного перепутали:
- указатель на переменную типа volatile - volatile unsigned int *ptr;
- volatile указатель - unsigned int * volatile ptr;

Что у вас изменяется вне программы? Указатель на регистр или значение регистра?

Полезное чтиво по чтению объявлений переменных -> http://www.unixwiz.net/techtips/reading-cdecl.html
Go to the top of the page
 
+Quote Post
skyv
сообщение Jan 16 2014, 11:33
Сообщение #3


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

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



Цитата(msalov @ Jan 16 2014, 12:44) *
Вы немного перепутали:
...


Да, согласен.
По Вашей ссылке посмотрю описание.
Я читал вот эту статью - volatile_for_chainiks.pdf.
И, если я правильно понял, автор советует всегда
использовать в качестве аргумента функции указатель на volatile переменную.
При этом сама переменная представляет собой регистр аппаратуры, который
объявлен как volatile.

Функция должна сделать некоторые действия над содержимым аппаратного
регистра (почитать, модифицировать, записать), может вернуть его значение.
Для того, что бы все действия функции над содержимым аппаратного регистра
не оптимизировались компилятором мы и должны использовать в качестве аргумента
указатель на volatile переменную.
При вызове функции просто передается адрес и никаких действий над ним
в других модулях программы не предполагается.
Например делаем конфигурацию различных каналов UART.


Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 05:27
Рейтинг@Mail.ru


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