小编ka0*_*a05的帖子

按应用程序访问链接描述文件中定义的符号

在我的链接器脚本文件中,我定义了两个符号

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处可用的值,但从此代码的角度来看是垃圾)

c linker iar

19
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

iar ×1

linker ×1