19.6 scatter文件

发布时间:2024-07-30  

一个映像文件里可以包含多个域(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的参数来实现,文件里描述了分散装载需要的两个信息。

①如何分散,就是输入段如何组成输出段和域:分组信息

②如何装载,就是装载域和每个运行域的地址是多少:定位信息

 

19.6.1 scatter文件简介

Scatter文件是一个文本文件,它描述了装载域和运行域的基本属性。

 

一、对装载域的描述

 

在scatter文件里,描述了装载域的名字、起始地址、最大尺寸、属性和运行域集合。其中最大尺寸和属性是可选的。如下例M051Simple.scf所示:

 

程序清单19.6-1 M051Simple.scf装载域

LR_IROM1 0x00000000  

{    

  ER_IROM1 0x00000000   

  {  

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

 

  RW_IRAM1 0x20000000   

  {  

   .ANY (+RW +ZI)

  }

}

 

在上面的scatter文件里,装载域的名字为LR_IROM1,起始地址为0x00000000,包含两个运行域:ER_IROM1和RW_IRAM1。编写好这个scatter文件后,就可以作为armlink的参数来使用它。

 

二、对运行域的描述

在scatter里,描述了运行域的名字、起始地址、最大尺寸、属性和输入段的集合,如下例所示:

 

程序清单19.6-2 M051Simple.scf运行域

LR_IROM1 0x00000000 0x2000  

{    

  ER_IROM1 0x00000000 0x2000  

  {  

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

 

  RW_IRAM1 0x20000000 0x1000  

  {  

   .ANY (+RW +ZI)

  }

 

 FLASH1 0x800 0x1F0

 {

    FLASH1 +0

    {

         Led1Ctrl.o

    }

 }

 

 FLASH2 0x1000 0xFF0

 {

    FLASH2 +0

    {

         Led7Ctrl.o

    }

 }

}

 

在这个文件里描述了两个运行域,分别为FLASH1 和FLASH2。FLASH1的起始地址为0x800,长度为0x1F0;Led1Ctrl.o里的所有代码和只读数据都放在这个运行域里,FLASH2亦然。

 

三、对输入段的描述

在scatter文件里,描述了输入段的模块名字(比如目标文件名)和输入段的属性(RO、RW、ZI等)。比如:uart.o(+ZI),其中,uart.o为模块名;+ZI为输入段的属性。模块名字可以用通配符号,比如:*。“*(+RO,+RW,+ZI)”表示所有的代码和数据段。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>