正如2.2.2节中所述,编译器将代码存放在.text段中,而根据所使用的存储模型和数据是否已初始化将数据存放在指定的段中。链接模块时,链接器根据各个段的属性来确定段的起始地址。
某些情况下必须将特定函数或变量存放在某个特定地址或某个地址范围内。为实现这一点,最简单的方法是使用address属性,如前述“关键字差别”所述。例如,将函数存放到程序存储器的地址0x8000中:
同样,将变量Mabonga存放到数据存储器的地址0x1000中:
定位代码和数据的另一种方法是将函数或变量存放到用户定义的段中,并在自定义的链接描述文件中指定该段的起始地址。具体如下:
1)在C源程序中修改代码或数据的声明来指定用户定义的段。
2)将这个用户定义段加入到一个自定义的链接描述文件中来指定段的起始地址。
例如,要将函数PrintString存放到程序存储器的0x8000地址中,首先要在C源程序中对函数进行如下声明:(www.xing528.com)
段属性指定将函数存放到名为.myTextSection的段中,而不是默认的.text段中。它没有指定用户定义的段存放在哪里。这必须在一个自定义的链接描述文件中指定,以针对器件的链接描述文件为基础,则应加入如下段定义:
这指定了输出文件应包括一个名为.myTextSection的段,这个段位于地址0x8000处,包含所有名为.myTextSection的输入段。由于在本例中,在该段中只有一个函数PrintString,那么这个函数将位于程序存储器的地址0x8000处。
类似地,要将变量Mabonga存放到数据存储器的地址0x1000中,首先要在C源程序中声明该变量如下:
段属性指定将变量存放到名为.myDataSection的段中,而不是默认的.data段中。它没有指定用户定义的段存放在哪里。同样地,这必须在一个自定义的链接描述文件中指定,以特定器件的链接描述文件为基础,则应加入如下段定义:
这指定了输出文件应包含一个名为.myDataSection的段,这个段位于地址0x1000处,包含所有名为.myDataSection的输入段。在这个例子中,由于该段中仅包含一个变量Mab onga,那么该变量将被存放到数据存储器的地址0x1000中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。