代码中声明的变量(静态或全局)首先与整个应用程序代码一起复制到片上闪存(ROM)。然后将它们复制到SRAM中。 静态和全局变量在SRAM(而不是堆栈)中分配一个地址,而函数中的局部变量分配到堆栈(SRAM的一部分)。 我怀疑:通过将变量声明为" const"类型,它是否将变量放在片上闪存(ROM)中,以便我可以保存SRAM或const数据也复制到SRAM虽然它们的值没有变化? (LPC17xx内存架构,Keil IDE代码)?
更新:const in ROM - 在此链接中,Mike Kleshov给出的答案确认const数据放在Onchip Flash中(使用Keil编译器)。
答案 0 :(得分:1)
是 - 在大多数微控制器上,将变量声明为const
将导致它存储在只读存储器中。
答案 1 :(得分:1)
您应该查阅特定编译器和/或链接器的文档。语言定义中没有要求在ROM中找到const
,因为不需要ROM。
如果有疑问,您应该使用工具链特定的链接器指令来根据需要定位数据。
请注意,在C ++中,const
的语义有些不同,可能无法在ROM中放置非POD 对象。在C ++中,我必须使用至少一个编译器将POD变量声明为static const
,以确保它被放置在ROM中。在某些情况下,一个简单的const将直接放在代码中,就好像它是一个文字常量。