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

 
 
> Странная проблема с переменными, или как пользоваться 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
Ответов
sigmaN
сообщение Aug 7 2008, 06:20
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Я не пользовался WinAVR, но называется это обычно heap size для кучи и stack size для стека ))

volatile действительно не имеет смысла.
Просмотрите внимательно ещё раз весь код.
Может быть как-то прогнать пошагово и попытаться определить где именно косяк?


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Spider
сообщение Aug 7 2008, 06:29
Сообщение #3


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

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



Цитата(sigmaN @ Aug 7 2008, 13:20) *
Я не пользовался WinAVR, но называется это обычно heap size для кучи и stack size для стека ))

volatile действительно не имеет смысла.
Просмотрите внимательно ещё раз весь код.
Может быть как-то прогнать пошагово и попытаться определить где именно косяк?

для инициализации внешней памяти использую рекомендацию из WinAVR:
-Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x807FFF
т.е. 32к во внешней. Всё остальное не изменно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 7 2008, 07:46
Сообщение #4


Гуру
******

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



Цитата(Alexey Belyaev @ Aug 7 2008, 09:29) *
т.е. 32к во внешней. Всё остальное не изменно.
А не может сбоить сама внешняя память? Попробуйте какой-нибудь тест написать (записать псевдослучайную последовательность и считывать ее в цикле, считая сбои), может программа и не виновата.
Цитата(Alexey Belyaev @ Aug 7 2008, 05:06) *
:\ А как "железо" может сменить указатель? smile.gif
Может. Самый простой пример - указатель стека. Более сложный - регистры адреса источника и приемника при ПДП (DMA). Софтовые варианты - указатель изменяется в прерывании. Или еще один случай - многопоточное приложение, доступ к указателю в разных потоках.

volatile перед стуктурой распространяет volatile на все члены структуры.
Если ни один из этих вариантов не подходит под ваш случай, то вам не нужно делать указатели volatile - этим вы дадите больше свободы оптимизатору, код станет короче и/или быстрее.


--------------------
На любой вопрос даю любой ответ
"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
Spider
сообщение Aug 7 2008, 08:16
Сообщение #5


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

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



Цитата(Сергей Борщ @ Aug 7 2008, 14:46) *
А не может сбоить сама внешняя память? Попробуйте какой-нибудь тест написать (записать псевдослучайную последовательность и считывать ее в цикле, считая сбои), может программа и не виновата.
Написано, всё ровно. Да и на другой железяке с этой прошивкой точно такие же сбои.
Цитата(Сергей Борщ @ Aug 7 2008, 14:46) *
Может. Самый простой пример - указатель стека. Более сложный - регистры адреса источника и приемника при ПДП (DMA). Софтовые варианты - указатель изменяется в прерывании. Или еще один случай - многопоточное приложение, доступ к указателю в разных потоках.
Ну многопоточность исключена smile.gif А по поводу изменения в прерываниях, то тут я уже однажды натыкался, и сейчас если и используется одна и та же переменная как в прерывании, так и в основном коде, то доступ к ней осуществляется только через остановку всех прерываний.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alexey Belyaev   Странная проблема с переменными   Aug 6 2008, 13:46
- - rezident   Разница есть, только смысла в ней нету А память ...   Aug 6 2008, 13:55
- - Сергей Борщ   В первом случае у вас может (неизвестным для компи...   Aug 6 2008, 13:58
|- - defunct   Цитата(Сергей Борщ @ Aug 6 2008, 16:58) P...   Aug 6 2008, 14:17
|- - Alexey Belyaev   Цитата(defunct @ Aug 6 2008, 21:17) Автор...   Aug 6 2008, 14:25
|- - defunct   Цитата(Alexey Belyaev @ Aug 6 2008, 17:25...   Aug 6 2008, 14:31
|- - Alexey Belyaev   Цитата(defunct @ Aug 6 2008, 21:31) Потом...   Aug 7 2008, 02:06
- - 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
- - 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 - 20:11
Рейтинг@Mail.ru


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