×

嵌入式软件开发之映像文件存储器映射调整分析

消耗积分:1 | 格式:rar | 大小:0.6 MB | 2017-10-19

分享资料个

 13.4 映像文件存储器映射调整
  13.4.1 关于分散加载
  映像由域(Regions)和输出段(Output Sections)组成。每个域可以有不同的加载地址和执行地址。
  分散加载可以更加方便准确的指定映像存储器映射,为映像组件分组和布局提供了全面控制。它能够描述由载入时和执行时分散在存储器映射中的多个区组成的复杂映像映射。虽然,分散加载可以用于简单映像,但它通常仅用于具有复杂存储器映射的映像。
  要构建映像的存储器映射,必须向armlink提供以下信息:
  · 分组信息:决定如何将各输入段组织成相应的输出段和域;
  · 定位信息:决定各域在存储空间的起始地址。
  有两种方法可以配置指定映像文件的分组和定位信息:如果映像文件中地址映射关系比较简单,可以使用命令行选项;如果映像文件中地址映射关系比较复杂的情况,可以使用一个配置文件。使用该配置文件可以告诉链接器相关的地址映射关系。配置文件又叫Scatter文件,是一个文本文件,通过下面的链接选项来实现。
  -scatter filename
  1.为分散加载定义的符号
  当armlink使用Scatter文件创建映像时,它创建一些区相关符号。表13.2概括了这些符号的意义。
  表13.2 域相关符号
  符 号意 义
  Load$$region_name$$Base域的载入地址
  Image$$region_name$$Base域的执行地址
  Image$$region_name$$Length执行域字节长度(4的倍数)
  Image$$region_name$$Limit执行区末尾地址
  Image$$region_name$$ZI$$Base执行域中ZI段的执行地址
  Image$$region_name$$ZI$$LengthZI输出段的长度(4的倍数)
  Image$$region_name$$ZI$$Limit执行域中ZI段的末尾地址
  2.使用Scatter文件的优势
  链接程序的命令行选项提供了一些对数据和代码布局的控制,但要实现对布局的全面控制命令行输入的指令是远远不够的。在下面一些情况下,就需要使用Scatter文件对映像布局进行控制。
  ① 需要实现复杂存储器映射
  系统中的代码和数据必须放在多个不同存储器区域中,这样连接器必须知道哪个段放在哪个储存器空间的详细信息。这种情况下,最好用Scatter文件实现代码映像的分散加载。
  ② 系统中存在多种不同类型存储器
  许多系统包含多种不同类型存储器,如flash存储器、ROM、SDRAM和快速SRAM。分散载入描述可以将代码和数据放置在最适合的存储器类型中。例如,中断代码可能放在快速SRAM中,以加快中断响应时间,而不频繁使用的配置信息可能放在较慢的flash存储器中。
  ③ 存储器映射I/O
  分散载入描述可以将数据精确定位在内存地址中,而避免数据和内存映射外围地址相冲突。
  ④ 位于固定位置函数
  可以将特定函数放在存储器中的同一个位置,这样即使周围的应用程序已经被修改并重新编译,也可以使具有特定功能的函数地址保持不变。
  ⑤ 使用符号识别堆和栈
  可以为堆和栈的位置定义符号,链接应用程序时可以指定该封闭模块的位置。
  随着目前嵌入式系统越来越复杂,系统中可能同时使用flash、ROM和RAM,所以建议在生产系统映像时使用Scatter文件。
  3.分散加载命令行选项
  可以使用下面的命令行选项使用分散加载文件。
  -scatter description_file_name
  使用该命令可以使链接器使用命令中给出的description_file_name文件生成最终的映像文件。
  4.简单存储器映像举例
  例如,一个实际系统的存储器映射如图13.7所示。
  嵌入式软件开发之映像文件存储器映射调整分析
  图13.7 简单存储器映射
  为了实现图13.7的存储器映射,使用图13.8所现实的Scatter文件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !