|
Может ли меняться адрес переменной в стеке? |
|
|
|
Oct 5 2010, 06:39
|

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

|
Допустим есть такой код: Код bool ModulesInit(uint8_t mn) { uint8_t cmd[3] = { 8, mn, 0 };
pTWI = cmd; // ... Массив cmd[] компилятор размещает в стеке. Затем его адрес присваивается другой переменной и она с ним как-то работает, причем эта переменная используется в прерывании. В связи с этим возникает вопрос: можно ли быть уверенным, что положение этого массива в ОЗУ (его абсолютный адрес) не изменится? Разумеется, при условии что из функции мы еще не вышли. Не может ли в процессе выполнения функции он как-то двигаться? Дело в том, что в таком виде наблюдались необъяснимые глюки, которые исчезли как только я объявил этот массив static. Но они и раньше иногда исчезали, поэтому нет уверенности, что их вылечил именно static.
|
|
|
|
|
 |
Ответов
|
Oct 5 2010, 08:24
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(GDI @ Oct 5 2010, 10:55)  ...Гораздо более вероятна ошибка программиста, т.е. все 4 выше приведенных пункта. Или стек переполнился, что тоже ошибка программиста. Или прерывание сработало после того, как программа покинула функцию. Цитата(777777 @ Oct 5 2010, 09:39)  Массив cmd[] компилятор размещает в стеке. Затем его адрес присваивается другой переменной и она с ним как-то работает, причем эта переменная используется в прерывании. Оооо! Какой моветон.
|
|
|
|
Сообщений в этой теме
777777 Может ли меняться адрес переменной в стеке? Oct 5 2010, 06:39 kolobok0 Цитата(777777 @ Oct 5 2010, 10:39) ...мож... Oct 5 2010, 07:32   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 prottoss Цитата(777777 @ Oct 5 2010, 13:39) Но они... Oct 5 2010, 11:10 777777 Цитата(prottoss @ Oct 5 2010, 15:10) Как ... Oct 5 2010, 14:33  kolobok0 Цитата(777777 @ Oct 5 2010, 18:33) Спасиб... Oct 5 2010, 16:50 Itch все дело в волшебном словечке volatile
Программис... Oct 6 2010, 03:41 IgorKossak Поскольку вопрос снят и так прекрасно всё закончил... Oct 7 2010, 06:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|