Ключевое слово 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 будет помещен непосредственно в код, как если бы он был литеральной константой.