Цитата(KARLSON @ Oct 27 2010, 15:24)

Как выйти из сложившейся ситуации?
Внимательно изучить документацию на компилятор. У него есть специальные директивы препроцессора по размещению переменных. Квалификатор
const к размещению переменных во Flash имеет лишь косвенное отношение.
Если вас устроит способ сделать "втупую", то я практиковал такой финт.
Создаем структуру констант
Код
typedef struct InfoSeg_t
{ float a;
unsigned int b;
unsigned int c;
char d;
char e;
} InfoSeg_t;
Объявляем константную структуру, инициализируем ее явными значениями и явно задаем адрес размещения
Код
#pragma location=0x1000
const InfoSeg_t InfoSegConst=
{ 1.0f,
0x1234,
5678,
0x0A,
0x0D
};
#pragma required=InfoSegConst
Вторая прагма нужна для того, чтобы компилятор не выкинул эту структуру в процессе оптимизации.
Объявляем еще одну структуру, но
неинициализированную, расположенную по тому же адресу, что и первая.
Код
#pragma location=0x1000
__no_init InfoSeg_t InfoSeg;
Далее в программе везде работаем именно со структурой
InfoSeg. Поскольку она не инициализирована явными значениями, то компилятор подстановку этих значений не делает, а каждый раз обращается к элементам данной структуры.
При компиляции конечно же выдается Warning, но я на него чихаю потому, что понимаю причину по которой он возникает.
Можно использовать и другие директивы #pragma, которые влияют на размещение переменных. Эта прагма еще из старых версий IAR.