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

 
 
7 страниц V  « < 5 6 7  
Reply to this topicStart new topic
> Вопрос к знатокам С.
sonycman
сообщение Jan 4 2009, 18:30
Сообщение #91


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



В оригинальной библиотеке для STM32 квалификатор volatile стоит у каждого члена структуры:
Код
typedef volatile unsigned short vu16;
typedef unsigned short u16;

typedef struct
{
  vu16 CR1;
  u16  RESERVED0;
  vu16 CR2;
  u16  RESERVED1;
  vu16 OAR1;
  u16  RESERVED2;
  vu16 OAR2;
  u16  RESERVED3;
  vu16 DR;
  u16  RESERVED4;
  vu16 SR1;
  u16  RESERVED5;
  vu16 SR2;
  u16  RESERVED6;
  vu16 CCR;
  u16  RESERVED7;
  vu16 TRISE;
  u16  RESERVED8;
} I2C_TypeDef;

По совету zltigo я попробовал с квалификатором перед всей структурой:
Код
    typedef volatile struct
{
    unsigned short SR2;
} I2C_Type_Def;

Но, к сожалению, разницы нет.
Такая прикольная конструкция:
Код
(void)I2C2_1->SR2;

действительно молча проглатывается - нет ни предупреждения, ни кода... smile.gif

В общем, буду знать, что C++ не допускает выражений, подобных
...
variable_name_only;
...

laughing.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 4 2009, 18:34
Сообщение #92


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sonycman @ Jan 4 2009, 21:30) *
Но, к сожалению, разницы нет.

И не должно быть. Я просто по привычке в естественной форме без ненужных излишеств написал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 4 2009, 19:00
Сообщение #93


Гуру
******

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



Цитата(GetSmart @ Jan 4 2009, 19:05) *
Если, теоретически, структуры могут иметь этот атрибут,
Конечно могут, как и любые другие типы данных. Применение модификатора volatile (также как и const) к структуре распространяет его на все члены структуры.

Цитата(zltigo @ Jan 4 2009, 19:49) *
Проблема в том, что компилятор плюсовый.
Точнее это бага плюсового компилятора. Я все-таки залез в стандарт С++, и вот что он пишет:
Цитата
1.9 Program execution
6. The observable behavior of the abstract machine is its sequence of reads and writes to volatile data and calls to library I/O functions.
7. Accessing an object designated by a volatile lvalue (3.10), modifying an object, calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment. [...]
7.1.5.1 The cv-qualifiers
8. [Note: volatile is a hint to the implementation to avoid aggressive optimization involving the object because the value of the object might be changed by means undetectable by an implementation. See 1.9 for detailed semantics. In general, the semantics of volatile are intended to be the same in C++ as they are in C. ]


--------------------
На любой вопрос даю любой ответ
"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
sonycman
сообщение Jan 4 2009, 20:18
Сообщение #94


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Сергей Борщ @ Jan 4 2009, 23:00) *
Точнее это бага плюсового компилятора. Я все-таки залез в стандарт С++, и вот что он пишет:

Хм, бага? В одной из последних версий RealView?
Неужели никто не использует подобные приёмы обращений к данным?
Тем более из плюсов? 05.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jan 4 2009, 20:36
Сообщение #95


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Я пробовал такое в MS VS2008 для ARM. Данные читаются, предупреждений никаких.
Go to the top of the page
 
+Quote Post

7 страниц V  « < 5 6 7
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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