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

GCC puts constant pointers and constant integers into different memory regions

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

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

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

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

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

换句话说,const适用于指针,但不适用于整数类型。我所说的工作是指它按照我的预期进行,从我之前的 post 推理,即将 "place" 标识符放入 FLASH (ROM)。

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

const uint_8 myValue=42;

看看它的位置。