在我的链接器脚本文件中,我定义了两个符号
define symbol _region_RAM_start__ = 0xC0000000;
define symbol _region_RAM_end__ = 0xC00fffff;
Run Code Online (Sandbox Code Playgroud)
然后我将它们导出,如下所示
export symbol _region_RAM_start__;
export symbol _region_RAM_end__;
Run Code Online (Sandbox Code Playgroud)
从applciation代码,我尝试访问这些符号
extern const unsigned int _region_RAM_start__;
extern const unsigned int _region_RAM_end__;
....
int GetRAMSize()
{
int size = 0;
unsigned int address_1 = _region_RAM_start__;
unsigned int address_2 = _region_RAM_end__;
size = address_2 - address_1 + 1U;
return size;
}
Run Code Online (Sandbox Code Playgroud)
现在,我希望返回值为0x00100000,但是,我得到的只是0.所以,当我转向调试器时,我注意到_region_RAM_start__和_region_RAM_end__分别具有值0xC0000000和0xC00fffff,但是address_1和address_2的值为0 .
编译器优化设置为"无".这一直困扰着我一段时间.在这里我是否有一些非常明显的东西(除了我不应该首先这样做)?
解决方案 感谢nm的答案
unsigned int address_1 = (unsigned int) (&_region_RAM_start__);
Run Code Online (Sandbox Code Playgroud)
否则address_1和address_2都包含垃圾值(即分别在地址0xC0000000和0xC00fffff处可用的值,但从此代码的角度来看是垃圾)