GCC将常量指针和常量整数放入不同的内存区域

时间:2016-05-19 13:36:36

标签: c linker embedded

我正在使用GCC for ARM V4.8.3开发一个嵌入式C项目。我想要实现的是将结构放入MCU的FLASH(ROM)存储器中。由于我的previous post我认为每个被定义为常量(const)的对象标识符都要放入.rodata部分,在我的情况下(根据liker脚本)是由.text嵌套,另一方面,它驻留在FLASH存储区域内。

我倾向于这么认为,因为我检查了一个对象定义,这是一个常量指针:

const char * const project_stringInvalidCharacter = "Invalid Character! \n";

如果限定为常量,则指针位于FLASH中。

但是,当我定义了一个类型为int(const uint_8 myObj;)的常量对象时,我看到它的地址代表了一个属于RAM或.bss区域的数字。

换句话说,const适用于指针,但不适用于整数类型。通过工作我的意思是它做了我所期望的,从我之前的帖子推断,即将标识符“放置”到FLASH(ROM)中。

1 个答案:

答案 0 :(得分:5)

也许编译器有点困惑,因为你没有为常量赋值。 尝试:

const uint_8 myValue=42;

并查看它的位置。