【问题标题】:lifetime of constant variable?常量变量的生命周期?
【发布时间】:2016-04-07 03:56:32
【问题描述】:

微控制器中常量变量的寿命是多少? const 变量是在 Runtime 之前分配还是在 Runtime 期间分配?

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

}

【问题讨论】:

  • 它可以依赖于编译器和编译器标志。您的示例代码是死代码,因此根本不会分配常量,因为它什么都不做(如果您使用优化)。没有一个固定的答案,因为规范没有规定这类事情,也不应该规定。
  • 针对您的特定目标,使用您的特定编译器和您喜欢的选项,编译然后反汇编以查看发生了什么。这是唯一的答案。

标签: runtime constants microcontroller lifetime


【解决方案1】:

这取决于编译器。

通常常量放在程序存储器中。编译完成后,常量会内置在 HEX 文件中。

例如,Microchip C18 和 XC32 编译器有不同的处理方式。虽然 C18 和 C32 有 const ROM,但您必须使用 -membedded-data 标志来指定 ROM 常量的放置方式和位置。

【讨论】:

  • 我的意思是当你在目标上烧代码时..作为编译器的角色在带来最终文件(.elf)后结束。
  • 常量始终存储在 ROM(程序存储器)中。这意味着嵌入到您的 HEX 文件中(您可以搜索它们)。内存空间分配是在编译/链接过程中完成的,这可能是您问题的答案。我的意思是,在某些情况下,您可以根据平台“调整”编译器来为常量设置准确的 ROM 区域。例如,C18 编译器允许为您声明的任何常量指定存储限定符,例如 nearfar。通过这种方式,您可以更好地组织程序内存,并将常用的常量保存在例如近段中。
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 2015-05-03
  • 1970-01-01
  • 2012-05-19
  • 2011-09-12
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多