Ключевое слово const для переменной (SRAM или On-Chip Flash)?

Переменные, объявленные в коде (статическом или глобальном), сначала копируются в On-Chip Flash(ROM) вместе со всем кодом приложения. Затем они автоматически копируются в SRAM. Статическим и глобальным переменным назначается адрес в SRAM(не в стеке), тогда как локальные переменные в функции назначаются стеку (часть SRAM). Мое сомнение: объявляя переменную как тип "const", она помещает переменную в On-Chip Flash(ROM), чтобы я мог сохранить SRAM, или данные const также копируются в SRAM, хотя их значение не изменяется? (Архитектура памяти LPC17xx, IDE Keil для кода)?

Обновление: const в ПЗУ. В этой ссылке ответ Майка Клешова подтверждает, что данные const помещаются во Onchip Flash (с использованием компилятора Keil).

2 ответа

Да - на большинстве микроконтроллеров объявление переменной как const заставит это быть сохраненным в постоянной памяти.

Вы должны обратиться к документации для вашего конкретного компилятора и / или компоновщика. В определении языка не требуется указывать местонахождение const в ПЗУ, так как нет требований к ПЗУ.

Если вы сомневаетесь, вы должны использовать директивы компоновщика для вашей цепочки инструментов, чтобы найти данные по мере необходимости.

Обратите внимание, что в C++ семантика const несколько отличаются, и может быть невозможно разместить не POD- объект в ПЗУ. По крайней мере на одном используемом мной компиляторе необходимо в C++ объявить переменную POD как static const чтобы убедиться, что он находится в ПЗУ. В некоторых случаях простой const будет помещен непосредственно в код, как если бы он был литеральной константой.

Другие вопросы по тегам