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

 
 
> Может ли меняться адрес переменной в стеке?
777777
сообщение Oct 5 2010, 06:39
Сообщение #1


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Допустим есть такой код:
Код
bool ModulesInit(uint8_t mn)
    {
    uint8_t cmd[3] = { 8, mn, 0 };

    pTWI = cmd;
    // ...

Массив cmd[] компилятор размещает в стеке. Затем его адрес присваивается другой переменной и она с ним как-то работает, причем эта переменная используется в прерывании. В связи с этим возникает вопрос: можно ли быть уверенным, что положение этого массива в ОЗУ (его абсолютный адрес) не изменится? Разумеется, при условии что из функции мы еще не вышли. Не может ли в процессе выполнения функции он как-то двигаться? Дело в том, что в таком виде наблюдались необъяснимые глюки, которые исчезли как только я объявил этот массив static. Но они и раньше иногда исчезали, поэтому нет уверенности, что их вылечил именно static.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Oct 5 2010, 11:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(777777 @ Oct 5 2010, 13:39) *
Но они и раньше иногда исчезали, поэтому нет уверенности, что их вылечил именно static.
Как только Вы объявили переменную как static внутри функции, переменная перестала быть стековым объектом, теперь она располагается по совершенно конкретному неизменяемому адресу в области памяти данных.


--------------------
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 5 2010, 14:33
Сообщение #3


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(prottoss @ Oct 5 2010, 15:10) *
Как только Вы объявили переменную как static внутри функции, переменная перестала быть стековым объектом, теперь она располагается по совершенно конкретному неизменяемому адресу в области памяти данных.

Спасибо, кэп!
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 5 2010, 16:50
Сообщение #4


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(777777 @ Oct 5 2010, 18:33) *
Спасибо, кэп!


если под дебагом не охота возится - есть другой ломовой способ.
выключаете кусок кода. помогло? да-нет. если да - подключаете кусок кода, делите его лапополам. одну половину выключаете. операцию повторяете. если не помогло - следующий кусок кода откусываете.
если после всех манипуляций у вас получилось строчек 10 кода, а всё остальное коменты - вот их (все 10) и выкладывайте сюда для помощи. а то как то гадания от телепатии уже пошли.


(круглый)

Сообщение отредактировал kolobok0 - Oct 5 2010, 16:50
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   Может ли меняться адрес переменной в стеке?   Oct 5 2010, 06:39
- - kolobok0   Цитата(777777 @ Oct 5 2010, 10:39) ...мож...   Oct 5 2010, 07:32
- - GDI   Как вы себе представляете "движения" сте...   Oct 5 2010, 07:55
|- - IgorKossak   Цитата(GDI @ Oct 5 2010, 10:55) ...Горазд...   Oct 5 2010, 08:24
|- - 777777   Цитата(IgorKossak @ Oct 5 2010, 12:24) Оо...   Oct 5 2010, 08:54
|- - MrYuran   Цитата(777777 @ Oct 5 2010, 12:54) Это ещ...   Oct 5 2010, 09:01
||- - 777777   Цитата(MrYuran @ Oct 5 2010, 13:01) А не ...   Oct 5 2010, 10:44
||- - Сергей Борщ   Цитата(777777 @ Oct 5 2010, 13:44) Обрабо...   Oct 5 2010, 17:14
||- - halfdoom   Цитата(Сергей Борщ @ Oct 5 2010, 20:14) Ф...   Oct 6 2010, 04:59
||- - Сергей Борщ   Цитата(halfdoom @ Oct 6 2010, 07:59) Точн...   Oct 6 2010, 08:56
||- - 777777   Цитата(Сергей Борщ @ Oct 6 2010, 12:56) Э...   Oct 6 2010, 09:19
||- - Сергей Борщ   Цитата(777777 @ Oct 6 2010, 12:19) Господ...   Oct 6 2010, 13:13
||- - 777777   Цитата(Сергей Борщ @ Oct 6 2010, 17:13) Т...   Oct 6 2010, 14:47
||- - Сергей Борщ   Цитата(777777 @ Oct 6 2010, 17:47) Я же н...   Oct 6 2010, 20:20
||- - kolobok0   (бормоча се под нос на ночь глядя) от посему обожа...   Oct 6 2010, 20:54
||- - Ink   Цитата(kolobok0 @ Oct 7 2010, 00:54) от п...   Oct 7 2010, 06:31
|- - Сергей Борщ   Цитата(777777 @ Oct 5 2010, 11:54) Этот б...   Oct 5 2010, 10:19
- - Itch   все дело в волшебном словечке volatile Программис...   Oct 6 2010, 03:41
- - IgorKossak   Поскольку вопрос снят и так прекрасно всё закончил...   Oct 7 2010, 06:39


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

 


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


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