您好、欢迎来到现金彩票网!
当前位置:众购彩票 > 分散装入 >

ARM的分散加载文件(scatter)介绍

发布时间:2019-04-23 09:21 来源:未知 编辑:admin

  我发现当我工程设置中linker中选择了runinram.sct和runinflash.sct或者自动生成的sct文件的时候就出现上面的错误。应该就是地址的问题。但是具体怎么修改才能解决这个错误,还没弄明白。弄明白了再发。

  分散加载文件(即scatterfile后缀为.scf)是一个文本文件,通过编写一个分散加载文件来指定

  ARM连接器在生成映像文件时如何分配RO,RW,ZI等数据的存放地址。如果不用SCATTER文件指定,那么

  ARM连接器会按照默认的方式来生成映像文件,一般情况下我们是不需要使用分散加载文件的。

  但在某些场合,我们希望把某些数据放在指定的地址处,那么这时候SCATTER文件就发挥了非常大的作用

  举个例子:比如像LPC2378芯片具有多个不连续的SRAM,通用的RAM是32KB,可是32KB不够用,我想把

  某个.C中的RW数据放在USB的SRAM中,那么就可以通过SCATTER文件来完成这个功能。

  .ANY(+RW,+ZI);; 此处.ANY替换原来的*,是因为下面的一个执行域对指定的模块中的RW,ZI数据指定了存放地址

  前面两个分散加载文件是从别的地方拷过来的,用在自己的程序中可能会有问题,因为如果不修改它的话它就固定了加载地址和运行地址,如果程序简单又比较小的话可能不会有问题,但是如果程序代码比较大,超出了那两个加载文件的定义大小可能就会出问题,解决办法也很简单,直接修改.sct文件直到适合你的代码。

  更好的办法是自己定义一个分散加载文件,在keil中勾选Use Memory Layout from Target Dialog,那么加载文件就是从你定义irom和iram等地址得到的,如果不勾选的话就是通过你自己指定的加载文件来加载。

  如果分散加载文件不对的话,可能出现的问题就是明明是在sram中调试程序,但是却能神奇的通过flash downloader下载到flash中去,刚开始也是不解,后来才发现是分散加载文件有错误,我使用了一个指定的flash.sct分散加载文件,这样的话我设置的irom和iram都无效了,编译器直接根据我指定的flash.sct来分布代码和加载代码,又查看了一下flash.sct文件是加代码加载到flash地址空间的,这就是为什么在jlink-sram工程中也能通过flash downloader工具烧写代码到flash中去的原因

http://philogene.net/fensanzhuangru/79.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有