在我的链接器脚本文件中,我定义了两个符号
define symbol _region_RAM_start__ = 0xC0000000;
define symbol _region_RAM_end__ = 0xC00fffff;
然后我将它们导出,如下所示
export symbol _region_RAM_start__;
export symbol _region_RAM_end__;
从应用程序代码中,我尝试访问这些符号
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;
}
现在,我希望返回值是 0x00100000,但是,我得到的只是 0。所以,当我转向调试器时,我注意到它_region_RAM_start__
的值分别为 0xC0000000和_region_RAM_end__
0xC00fffff,但值为 0。address_1
address_2
编译器优化设置为“无”。这一直困扰着我一段时间。我在这里是否缺少一些非常明显的东西(除了“我一开始就不应该这样做”)?
解决方案 感谢nm的回答
unsigned int address_1 = (unsigned int) (&_region_RAM_start__);
否则address_1
,address_2
两者都包含垃圾值(即分别在地址 0xC0000000 和 0xC00fffff 处可用的值,但从这段代码的角度来看是垃圾)