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

 
 
 
Reply to this topicStart new topic
> вопрос о макросе #define __O volatile
Cree
сообщение Aug 27 2014, 17:43
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 27-08-14
Пользователь №: 82 660



Здравствуйте! Практически ничего не знаю о контроллерах. Только начал читать первую книгу в жизни по этой теме.
Нашел не очень понятный момент. В core_cm3.h есть такой код.
Код
/* IO definitions (access restrictions to peripheral registers) */
#ifdef __cplusplus
  #define   __I     volatile             /*!< defines 'read only' permissions                 */
#else
  #define   __I     volatile const       /*!< defines 'read only' permissions                 */
#endif
#define     __O     volatile             /*!< defines 'write only' permissions                */
#define     __IO    volatile             /*!< defines 'read / write' permissions              */

/*@} end of group CMSIS_core_definitions */

Вот я не могу понять, что значит write only? Кто мне запретит читать оттуда? В случае volatile const все ясно - получится только читать, а писать нет. Будет здорово если поможете мне понять что значит write only permissions в данном контексте.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 27 2014, 19:22
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Никто не запретит читать. Тут комментарий не совсем отражает код. Они имели ввиду, что этот макрос (за неимением ничего лучшего) будут использовать для описания write only регистров. В языке нет средств для объявления write only переменных.

Добавил: Отдельный макрос сделан для облегчения жизни программисту - чтобы он видел этот намек на write-only, когда объявление регистра будет появляться во всплывающих подсказках редактора.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 27 2014, 20:45
Сообщение #3


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



В даташите на STM32-й какой-то про write only было написано, что читается reset state value - оно написано для каждого регистра. т.е., можно не читать - толку никакого. А где-то чтение откуда нельзя может привести (например) к стиранию флэша... Или ещё чего.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 28 2014, 07:49
Сообщение #4


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Такие файлы надо начинать читать с конца wink.gif
Вот определена там функция
static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
ну и замечательно, используем её для разрешения прерываний.
Захотелось самостоятельно поработать с регистрами - смотрим выше по тексту определение NVIC и структуру NVIC_Type.

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


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
WitFed
сообщение Aug 28 2014, 07:56
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701



Если бы это были встроенные слова компилятора, то он мог бы проверить на запись одноимённую переменную и поругаться.
Но т.к. всё сделано через "#define", это чисто информация юзеру о правилах приличия в поведении с данным адресом.
Ну мож сэкономили они на интерфейсе чтения из конкретного регистра -- ты ж сам писал в него когда-то, запомни это значение в памяти и читай его при необходимости, а им окажется 3 цента выигрыш ! wink.gif
Может не только дефолтное значение читаться (для квалификатора __O его придумывать бессмысленно), а 0, -1, мусор, прошлое читаемое из этого региона, ну или самая жесть -- зависание.
Хотя обычно в последнее время чтение из недопустимых адресов возвращает 0, а запись туда игнорируется.
Go to the top of the page
 
+Quote Post
Cree
сообщение Aug 28 2014, 09:41
Сообщение #6





Группа: Новичок
Сообщений: 9
Регистрация: 27-08-14
Пользователь №: 82 660



Большое спасибо всем ответившим! Я просто немного обезкуражился этим write only. Теперь все ясно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th August 2025 - 09:18
Рейтинг@Mail.ru


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