2012-05-03 107 views
3

在哪个部分是存储在c中的常量易失性变量?在微控制器中,我们应该将这种变量放入RAM中。对?c中存储的常量volatile变量在哪里?

+1

在微控制器中,您可以看到端口引脚通常定义为易失性变量。由于该编译器不会优化代码并且不会用缓存值替换该值。所以我们可以确保每次只能从端口引脚读取最新的更新值。 – kapilddit

回答

7

A const volatile变量意味着你的C程序不能合法地改变它,但其他东西可以。将这个变量放在RAM中是合乎逻辑的,但是如果您通过链接描述文件或类似选项将其放置在ROM中,编译器就不会抱怨。在某些存储器映射设备所在的位置找到这个变量也是有用的,例如,一个只读定时器计数器寄存器或一个ADC输出寄存器。

+0

因此,如果我们将常量变量分配给ROM,那么编译器会自动将这些变量分配给ROM。对? – suraj

+0

这取决于你的编译器以及你如何使用它。 –

9

Volatile已经注意到存储变量的位置。它只是告诉编译器每次从内存中读取变量以避免编译器可能为该变量执行的任何优化。

3

const单片机应用程序的变量很可能存储在闪存中ROM。它们存储在RAM中的唯一时间是在运行时对它们进行评估,例如函数的const参数。或者当你正在做一些从RAM执行的调试版本。

volatile与存储变量的位置无关,如其他答案中的解释。

9
  1. 局部变量和函数帧 - 堆如果未初始化

  2. 全局和静态变量 - 通过符号的.bss块起始如果

  3. 全局和静态变量初始化 - 数据段

  4. 环境变量和参数 - 在堆栈顶部

  5. 动态数据分配 - 堆

  6. CONST - ROM

  7. 挥发性 - 没有存储

  8. 寄存器 - CPU寄存器

  9. CONST挥发性的 - 在相同的地方为const存储