Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Уровень оптимизации компилятора и глобальные переменные
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
_Mikhail_
Добрый день!
Среда разработки Keil 4.72, мк LPC2478.

typedef unsigned int * pInt32U;

#define Adr 0xE0084000

pInt32U a = (pInt32U)Adr ;
pInt32U b = (pInt32U)Adr +1;
pInt32U c = (pInt32U)Adr +2;
pInt32U d = (pInt32U)Adr +3;

В результате:
a = 0xE0084000,
b = 0xE0084004,
c = 0xE0084008,
d = ЛЕВЫЙ АДРЕС!!!!

Если отключить оптимизацию компилятора (Level 0 -O0), то результат становится ожидаемым:
a = 0xE0084000,
b = 0xE0084004,
c = 0xE0084008,
d = 0xE008400C

Указатели в модуле объявляются глобально.
В "чистом" проекте данный код работает нормально.

В чем может быть проблема?
Сергей Борщ
QUOTE (_Mikhail_ @ Aug 21 2013, 11:15) *
В чем может быть проблема?
Например в том, что компилятор перенес в другое (более позднее) место ее инициализацию.
_Mikhail_
Цитата(Сергей Борщ @ Aug 21 2013, 14:04) *
Например в том, что компилятор перенес в другое (более позднее) место ее инициализацию.


Точно! Семен Семеныч! )))
Этот указатель я еще не успел использовать в программе. И при включенной оптимизации компилятор его вообще инициализировать не стал.

Сергей, спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.