2016-04-07 2 views
0

Каково время жизни постоянных переменных в микроконтроллере? Являются ли константные переменные распределенными до Runtime или во время выполнения?время жизни постоянной переменной?

void main() 
{ 
    const x=5; 
    while(1) 
    { } 

} 
+0

это может зависеть от флагов компилятора и компилятора. ваш примерный код - это мертвый код, поэтому константа не будет выделяться вообще, поскольку она ничего не делает (если вы используете оптимизации). нет однозначного ответа, потому что спецификация не диктует такие вещи, и не должна. –

+0

для вашей конкретной цели с вашим конкретным компилятором с вашими любимыми параметрами, скомпилируйте, затем разоберите, чтобы узнать, что произошло. это единственный ответ. –

ответ

1

Это зависит от компилятора.

Обычно константа помещается в память программы. После компиляции константы встроены в файл HEX.

Например, компиляторы Microchip C18 и XC32 имеют различную управляемость. В то время как C18 имеет постоянное ПЗУ с C32, вы должны использовать флаг -membedded-data, чтобы указать, как и будут ли в ПЗУ постоянные будут помещены.

+0

Я имею в виду, когда вы записываете код на цель .. поскольку роль компилятора закончилась после приведения финального файла (.elf). –

+1

Константы всегда хранятся в ПЗУ (программная память). Что означает встроенный в ваш HEX-файл (вы можете их искать). Выделение пространства памяти выполняется во время процесса компиляции/связывания, что, вероятно, отвечает на ваш вопрос. Я имел в виду, что в некоторых случаях, в зависимости от платформы, вы можете «настроить» компилятор, чтобы установить точную область ROM для констант. Например, компилятор C18 позволяет указать классификаторы хранения, такие как '' '' '' '' '' '' '' '' '' '' '' для любой константы, которую вы объявляете. Таким образом, вы можете улучшить организацию памяти программ и часто использовать константы в ближайшем сегменте, например. –

 Смежные вопросы

  • Нет связанных вопросов^_^