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;
看看它的位置。
我正在使用 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;
看看它的位置。