哪个部分是存储在 c. 中的常量 volatile 变量?在微控制器中,我们应该将此类变量放入 RAM。正确的?
5 回答
局部变量和函数框架 - 堆栈
全局变量和静态变量(如果未初始化) - .bss 块以符号开头
全局变量和静态变量(如果已初始化) - 数据段
环境变量和参数 - 在堆栈顶部
动态数据分配 - 堆
常量-ROM
易挥发 - 无储存
寄存器 - cpu 寄存器
const volatile - 与 const storage 在同一个地方
Volatile
与存储变量的位置有关。它只是告诉编译器每次都从内存中读取变量,以避免编译器可能对该变量执行任何优化。
const volatile
变量意味着您的 C 程序不能合法地更改它,但其他东西可以。将此变量放在 RAM 中是合乎逻辑的,但是如果您告诉它(通过链接描述文件或类似选项)将其放在 ROM 中,编译器不会抱怨。将这个变量定位在某些内存映射设备所在的位置也可能很有用,例如只读定时器计数器寄存器或 ADC 输出寄存器。
const
微控制器应用程序的变量很可能存储在闪存ROM中。它们存储在 RAM 中的唯一时间是在运行时评估它们,例如函数的 const 参数。或者当您从 RAM 执行一些调试构建时。
volatile
如其他答案所述,与变量的存储位置无关。
好吧,作为一个常量需要 RAM 地址,它可以存储在 ROM 中,但很可能它会(通过扩展)存储在(只读)汇编代码中,就像 for a += 2
. 这是一个最快的速度volatile
。