找回密码
 注册
搜索
查看: 1828|回复: 5

[讨论] 高手请进,scatter文件问题

[复制链接]
发表于 2012-10-16 20:16:26 | 显示全部楼层 |阅读模式
关于分散加载,个人理解是这样:程序运行时,各输入段,按照scatter里面的地址分散加载到对应地址去执行,这是就是所谓的运行域,但是加载域呢,它只是存储在flash里,代码的一个存储区域。在运行时,输入段的地址scatter文件可以找到,但是加载时(程序烧到flash里面,在它没运行前),它的各输入段是怎么存储的呢?高手指点下
 楼主| 发表于 2012-10-20 15:32:18 | 显示全部楼层
[em08] 感谢楼上的指教。。。
点评回复

使用道具 举报

发表于 2012-10-19 12:15:43 | 显示全部楼层
6530里面,如果scatter中有两个输出域,那第一个域放置指定的RO,RW,第二个域里放置其它的RO,生成kernel.bin和user.bin,编译工程时又生成一个资源的res.bin,然后将kernel.bin和压缩后的user.bin和压缩后的res.bin按顺序连接起来,就生成了ps这个文件。这个ps文件,通过下载工具,将其烧录到nor flash的一个分区里面(flash有很多分区)。你所指的各输入段最终放在kernel.bin,user.bin这两个文件中。
你指的调整scatter中lib放置的位置,如果没有6530中压缩的机制,那生成的PS应该是一样大的,但是,6530会将第二个域进行压缩,所以生成的PS就小了。这里小,是由于压缩机制导致的。
点评回复

使用道具 举报

 楼主| 发表于 2012-10-16 20:42:37 | 显示全部楼层
[em14]自己顶起。。。[em01][em02][em03]
点评回复

使用道具 举报

 楼主| 发表于 2012-10-16 20:41:59 | 显示全部楼层
另外还有,RVCT编译器链接时候,对scatter文件保存了运行时候的重定位信息,同时它是怎么分配烧录到flash地址的哪一段区域的?
点评回复

使用道具 举报

 楼主| 发表于 2012-10-16 20:32:10 | 显示全部楼层
项目中,有两个加载域,加了很多东西之后,发现烧机烧不进去。解决办法是,把后加程序的一个lib,在scatter文件里面,手动添加到第二个加载域当中,这样在展讯6530平台,烧机时就不会提示ps超出。我有个疑问就是,当你没有指定哪个lib或者目标文件,而scatter文件里面本身就有*(+RO)、*(+RW)、*(+ZI)输入段属性,它不是应该在第一个加载域空间满之后,直接把程序写入第二个加载域当中吗?为什么要手动添加?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-4 22:45 , Processed in 0.049357 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表