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

 
 
> Странная проблема с переменными, или как пользоваться volatile
Spider
сообщение Aug 6 2008, 13:46
Сообщение #1


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Чудесным образом портится память. Стал выяснять что же не так и не пойму.
Возник вопрос каксающийся volatile.
Есть ли разница в следующем и какая?
Код
typedef struct TSTRUCT
{
  volatile u8 *DATABuff;
  volatile u8 *CMDBuff;
} T_STRUCT;

volatile T_STRUCT STRUCT;
и вариант
Код
typedef struct TSTRUCT
{
  u8 *DATABuff;
  u8 *CMDBuff;
} T_STRUCT;

volatile T_STRUCT STRUCT;
Какова будет разница? есть ли тут смысл?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Aug 6 2008, 13:58
Сообщение #2


Гуру
******

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



В первом случае у вас может (неизвестным для компилятора образом) измениться то, на что указывает указатель в структуре. во втором случае - сам указатель.

P.S. Вообще интересная постановка вопроса: "А что же я понаписал?" Может стоить формулировать его несколько иначе: "Мне надо чтобы было так-то. Как это сделать?"


--------------------
На любой вопрос даю любой ответ
"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
defunct
сообщение Aug 6 2008, 14:17
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Сергей Борщ @ Aug 6 2008, 16:58) *
P.S. Вообще интересная постановка вопроса: "А что же я понаписал?" Может стоить формулировать его несколько иначе: "Мне надо чтобы было так-то. Как это сделать?"

При memory corruption bug'ах не до постановки "Мне надо чтобы...", потому что неизвестно что надо на самом деле..
Автор может сказать лишь - "Мне надо чтобы не глючило".

Цитата
есть ли тут смысл?

Смысла в volatile'ях тут нет, как перед полями структуры так и перед объявлением самой структуры.

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

Чем больше статистических данных получите, тем проще будет локализовать блок вызывающий повреждения.
Go to the top of the page
 
+Quote Post
Spider
сообщение Aug 6 2008, 14:25
Сообщение #4


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Цитата(defunct @ Aug 6 2008, 21:17) *
Автор может сказать лишь - "Мне надо чтобы не глючило".
Смысла в volatile'ях тут нет, как перед полями структуры так и перед объявлением самой структуры.

Почему? Точнее почему нет смыла перед объявлением самой структуры?
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 6 2008, 14:31
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alexey Belyaev @ Aug 6 2008, 17:25) *
Почему? Точнее почему нет смыла перед объявлением самой структуры?

Потому что компилятор обычно не опускает обращения к полям структур и так. Да и не видя кода где такая структура используется volatile - теряют весь смысл.
У вас указатели в ней могут произвольно меняться скажем "железом" или еще каким-то странным образом?

Цитата
данные могут портиться при нарушении выравнивания слов.

Не могут - ШД 8-ми битная.
Это не ARM.
Go to the top of the page
 
+Quote Post
Spider
сообщение Aug 7 2008, 02:06
Сообщение #6


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Цитата(defunct @ Aug 6 2008, 21:31) *
Потому что компилятор обычно не опускает обращения к полям структур и так. Да и не видя кода где такая структура используется volatile - теряют весь смысл.
В основном структура передаётся в функции как указатель на неё.
Код
foo(T_STRUCT *S);
И ещё делаю memcpy().
Цитата(defunct @ Aug 6 2008, 21:31) *
У вас указатели в ней могут произвольно меняться скажем "железом" или еще каким-то странным образом?

:\ А как "железо" может сменить указатель? smile.gif Нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alexey Belyaev   Странная проблема с переменными   Aug 6 2008, 13:46
- - rezident   Разница есть, только смысла в ней нету А память ...   Aug 6 2008, 13:55
- - MrYuran   данные могут портиться при нарушении выравнивания ...   Aug 6 2008, 14:23
- - SysRq   Цитата(defunct @ Aug 6 2008, 18:17) Расск...   Aug 7 2008, 02:33
|- - Alexey Belyaev   Цитата(SysRq @ Aug 7 2008, 09:33) Цитата(...   Aug 7 2008, 04:21
|- - XVR   Цитата(Alexey Belyaev @ Aug 7 2008, 08:21...   Aug 7 2008, 08:23
||- - Alexey Belyaev   Цитата(XVR @ Aug 7 2008, 15:23) Уже произ...   Aug 7 2008, 08:40
|- - defunct   Цитата(Alexey Belyaev @ Aug 7 2008, 07:21...   Aug 7 2008, 10:52
|- - Alexey Belyaev   Цитата(defunct @ Aug 7 2008, 17:52) Это п...   Aug 7 2008, 11:45
|- - defunct   Цитата(Alexey Belyaev @ Aug 7 2008, 14:45...   Aug 7 2008, 12:53
|- - Alexey Belyaev   Цитата(defunct @ Aug 7 2008, 19:53) Пробл...   Aug 7 2008, 13:14
|- - rezident   Цитата(Alexey Belyaev @ Aug 7 2008, 19:14...   Aug 7 2008, 13:39
- - Непомнящий Евгений   размер кучи достаточен? Куча часом не до стека иде...   Aug 7 2008, 05:32
|- - Alexey Belyaev   Цитата(Непомнящий Евгений @ Aug 7 2008, 12...   Aug 7 2008, 06:03
- - sigmaN   Я не пользовался WinAVR, но называется это обычно ...   Aug 7 2008, 06:20
|- - Alexey Belyaev   Цитата(sigmaN @ Aug 7 2008, 13:20) Я не п...   Aug 7 2008, 06:29
|- - Сергей Борщ   Цитата(Alexey Belyaev @ Aug 7 2008, 09:29...   Aug 7 2008, 07:46
|- - Alexey Belyaev   Цитата(Сергей Борщ @ Aug 7 2008, 14:46) А...   Aug 7 2008, 08:16
- - Alexey Belyaev   Ну вот. Не знаю что сделал, но глюк стал стабилен....   Aug 7 2008, 10:36
- - Alexey Belyaev   Ну в общем ситуация такая. Была просадка напряжени...   Aug 8 2008, 05:41


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

 


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


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