一个映像文件里可以包含多个域(region),它们在装载和运行时可以有不同的地址。这个地址可以用armlink的两个参数来确定: ro-base 设置代码段(RO)在装载域(load view)和运行域(execution view)里的地址。 rw-base 设置数据段(RW)在运行域里的地址。 实际上,当域的内存映射关系比较简单时,可以使用这两个参数,但它们不能处理更为复杂的内存映射(memeory map),在这种情况下,就要用分散装载(scatter loading)技术。 分散装载技术可以把应用程序分割成多个RO域和RW域,并且给它们指定不同的地址。这在嵌入式的实际应用中,有很大好处。在一个嵌入式系统中,Flash、16位RAM、32位RAM都可能存在于系统中,所以,将不同功能的代码定位在特定的位置大大地提高系统的效率。下面是最为常用的两种情况: 第一种情况:32位的RAM速度最快,那么就把中断程序作为一单独的运行域,放在32位的RAM中,使它的响应时间缩到最短,这在startup_M051.s文件中有体现。 第二种情况:将启动代码(bootloader)以外的所有代码都复制到RAM中运行。 那么,分散装载是如何实现的呢?它通过一个文本文件作为armlink的参数来实现,文件里描述了分散装载需要的两个信息。 ① 如何分散,就是输入段如何组成输出段和域:分组信息 ② 如何装载,就是装载域和每个运行域的地址是多少:定位信息
|