网站大量收购闲置独家精品文档,联系QQ:2885784924

scatter文件的写法要点.pdf

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
scatter文件的写法要点

scatter文件的写法 程序总有两种状态:运行态和静止态。当系统掉电的时候程序需要被保存在非易失性的存储器中,且 这个时候程序的排放是按照地址依次放的,换句话说:我才懒得管它怎么放,只要不掉就行。当系统上电 后,CPU就要跑起来了,CPU属于高速器件,存储器总是不怎么能跟得上,既然跟不上那么我们就尽量缩 短它们之间的差距,那留下一条路,那就是尽量提高存储器的读取速度,存储器类型决定其速度的水平, 那么尽量放在速度高的存储器就成为首选解决方案。那么我们就把要执行的程序暂时拿到速度较快的RAM 中。那么拿的过程就牵涉到程序的加载了。这就是要解决的问题。 一个映像文件由域(region)、输出段(output sections)和输入段(input sections)组成。不要 想得太复杂,其实他们之间就是包含与被包好的关系。具体关系是这样的: 映像文件 域 输出段 输入段 输入段: 输入段就是我们写的代码+初始化的数据+应该被初始化为0的数据+没有初始化的数据,用英文表示 一下就是:RO (ReadOnly),RW (ReadWrite),ZI (ZeroInitialized),NOINIT (Not Initialize d)。ARM连接器根据各个输入段不同的属性把相同的拿再一起组合一下就成为了输出段。 请看看平时写的东东: AREA RESET, CODE, READONLY AREA DSEG1, DATA, READWRITE AREA HEAP, NOINIT, READWRITE 看出其属性没? 输出段: 为了简化编译过程和更容易取得各种段的地址,那么把多个同属性的输入段按照一定的规律组合在一 起,当然这个输出段的属性就和它包含的输入段的属性一样咯。输入段的排放规律就是:最先排放RO属 性的输入段,然后是RW属性段,最后是ZI或NOINIT段。 域: 为什么还要加一层域,我的理解是由于代码的功能不同,那么我们有必要把不同功能的代码分类放。 我们可以把需要高速执行的代码放在一起、把对速度要求不高的放在一起、把执行频率高的放在一起,把 执行频率低的放在一起...那么按照这种方式放的代码就可以根据其具体需要放在不同的存储器中了。这 样可以提高程序执行速度。一个域中包含 1~3个输出段。 映像文件: 我暂时把映像文件理解成烧到存储器中的文件,由N个域组成。这些域其实可以看做是独立的模块, 只是他们按照一定的顺序(这个顺序还是:RO+RW+ZI)被捆绑在一起,这样才方便烧写到非易失存储器中 去。 好了,了解了映像文件的组成,那么来看看映像文件是怎么跑起来的。 映像文件就是有N节车厢的火车,车厢(域)里装着要送到不同站(不同类型的存储器)的货物。到 相应的站了,那么就把相应的车厢拿下来。指挥拿这个的就是scatter文件。拿下货物车厢后,我们就解 开它,把里面的品牌为RO 的货物提取出来,按照scatter的指示发给某个地址,然后再先后把品牌为RW 和ZI 的货物发到scatter指定的地址。 看看这个加深理解: LOAD_ROM1 0 ; 从火车上取出来时的地址(如:成都站) { EXEC_ROM1 0 { PROGRAM.O (+RO) ;把品牌RO 的货物发给0 去 RAM1 0 { PROGRAM.O(+RW,+ZI);把品牌RW,ZI 的货物依次发给0x8 0000000 } } } 其他的段也可以这样依葫芦画瓢。 scatter的原理就介绍这样,其中的语法和规则要多写多把代码的地址拖出来看才能体会。不过都

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档