Thu*_*fir 6 c++ embedded gcc arm
我在CORTEX-M4上使用GCC 6.3.1 for ARM -O2
.
如果我有一个像这样的简单类实例:
class Test
{
public:
void Print(void) const
{
printf("Test");
}
};
const static Test test;
Run Code Online (Sandbox Code Playgroud)
在某处我引用该对象的地址,如:
printf("Address: %X", &test);
Run Code Online (Sandbox Code Playgroud)
然后我可以在map文件中看到编译器为.bss
段中的该地址保留一个字节:
.bss._ZL4test 0x20005308 0x1
Run Code Online (Sandbox Code Playgroud)
保留一个字节是合乎逻辑的,因为每个被寻址的对象必须有一个地址.另一方面,我认为对于像这样简单的东西,编译器会在.text
段中保留不占用任何RAM空间的空间.
现在,我可以.text
通过将定义更改为以下内容来强制对象进入细分:
const static Test test __attribute__ ((section (".text")));
Run Code Online (Sandbox Code Playgroud)
但随后它总是被迫进入那一部分.这意味着当有人插入非const成员变量时,该对象将不再起作用.
有没有办法告诉g ++将这些对象的地址(没有任何成员变量)放入FLASH而不是RAM(不使用__attribute__
)?
归档时间: |
|
查看次数: |
180 次 |
最近记录: |