Вариант 1:
Код
#define AR_SIZE 500
char ar[AR_SIZE];
void main()
{
}
Результат компиляции:
Program Size: Code=1108 RO-data=16 RW-data=0 ZI-data=1256
Вариант 2:
Код
#define AR_SIZE 500
const char ar[AR_SIZE];
void main()
{
}
Результат:
Program Size: Code=1108 RO-data=16 RW-data=0 ZI-data=1256
Размер кода не изменился. Сдедовательно, константа разметилась в оперативке.
Source Browser вообще в явном виде говорит, что переменная ar размещена в data.
Может, надо выставить какие-то настройки в опциях компилятора, чтобы он константы располагал во флеше, а не в оперативке?
Я не нашел что-то.
Цитата
Можно ещё добавить static:
Цитата
static не имеет никакого отношения к размешению кода во флеш, а только определяет область видимости переменной.
Всем спасибо!
Но все не правы.
Статик не только определяет область видимости переменной.
Это указывает компилятору разместить переменную в области статических данных.
Эти переменные инициализируются один раз во время объявления, и их значения остаются действительными в течение времени жизни программы.
Например, объявленная внутри функции переменная не потеряет своего последнего значения при следующем входе в данную функцию.
Исходя из этой идеалогии, статические переменные не должны размещаться в коде.