<MP求助>请教scatter文件格式的一些细节

[复制链接]
3382|20
 楼主| McuPlayer 发表于 2012-9-12 13:33 | 显示全部楼层 |阅读模式
PRO2 0x2000A000 0xA000        ; execution address
        {
                Timing_*.o (TimingCode+RO)
        }

发现,这个scatter语句,只匹配文件,不匹配Section名字
调试器版本是 MDK4.20
armcc和armlink的版本是 4.1.0.644

有什么办法,既匹配文件名,又匹配Section名字?
阿南 发表于 2012-9-12 13:59 | 显示全部楼层
MP问的问题通常不是一般问题:lol
 楼主| McuPlayer 发表于 2012-9-12 14:11 | 显示全部楼层
阿南,请帮忙

现在有个产品,程序空间不够用了
打算改成APP部分按需加载的方式,这样平时只有一个APP就够了
 楼主| McuPlayer 发表于 2012-9-12 14:15 | 显示全部楼层
Timing_*.o (TimingCode+RO)

我本意是选择Timing为前缀的o文件其中的TimingCode段

实际选择的却是Timing为前缀的o文件的所有RO段

很郁闷
xinzha 发表于 2012-9-12 15:16 | 显示全部楼层
按需加载你可以用overlay选项,稍微麻烦点。如果你已经用了#pragma section这种方式,那只要把那些.o一个个列出来,然后选择他们的输入段,这样就最安全了。
 楼主| McuPlayer 发表于 2012-9-12 20:54 | 显示全部楼层
目前是一个个列出.o文件,但这样比较麻烦的是每次的APP的文件名不同,scatter都要改动
 楼主| McuPlayer 发表于 2012-9-12 20:55 | 显示全部楼层
armlin可以编译DLL或者EXE结构的elf文件

我想把AP做成DLL式的,怎么设置连接器,来编译平台,和每个APP
 楼主| McuPlayer 发表于 2012-9-12 20:56 | 显示全部楼层
网上搜了一些**,基本是翻译的,还不如看arm的在线文档或者PDF
但arm的文档很多地方说的也不清不楚的
xinzha 发表于 2012-9-12 22:05 | 显示全部楼层
去看armlink的官方文档,里面有关于overlay的讲解,这种方式下你可以把几个模块编译在一样的起始地址,用到哪个模块就把哪个模块从flash中拷贝到内存中的相应地址。我过去做过一个项目,里面有多种解码器,而实际同一时刻只需有一种解码器存在,为了节省内存空间就使用了这种方式。当然你自己得写一个加载管理器。
而使用dll的方式需要你把动态加载的模块做成一个位置无关的可执行库,在arm的工具中有这个选项。到你需要加载的时候就把库拷贝到你分配好的空间,但是要注意库的入口和函数都要符合一定的条件,否则会有bug。

评分

参与人数 1威望 +10 收起 理由
McuPlayer + 10 您的建议非常匹配我的需求,谢谢 ...

查看全部评分

nextkey 发表于 2012-9-12 22:32 | 显示全部楼层
mcuplayer想要的这个东西,之前做过尝试,
与xinzha提的overlay是一个概念
nextkey 发表于 2012-9-12 22:34 | 显示全部楼层
是按需加载到RAM吧?

3# McuPlayer
 楼主| McuPlayer 发表于 2012-9-13 01:04 | 显示全部楼层
是的,加载到RAM

APP存储在SPI Flash里面,平台负责把APP给copy到RAM,然后call过去
 楼主| McuPlayer 发表于 2012-9-13 01:23 | 显示全部楼层
to xinzha:
是的,override是个不错的建议,代码拷贝和数据的初始化,处理的复杂的低很多


http://infocenter.arm.com/help/index.jsp
跟微软的MSDN一个架势,丰富的文档,用了你就很难再离开他。
真希望中国也有有一家这样的技术公司,不要技术有多高端。
几年前就感叹过一次,今天再感叹一次了。
 楼主| McuPlayer 发表于 2012-9-13 01:25 | 显示全部楼层
另外,看了xinzha在21IC的几个旧贴,扎实学习的足迹:victory:
 楼主| McuPlayer 发表于 2012-9-13 01:30 | 显示全部楼层
另外,这次分离平台和APP,就折腾scatter文件,然后对着map看效果
同时部分代码从C转到C++,运行时库的问题还要处理
nextkey 发表于 2012-9-13 08:58 | 显示全部楼层
你这个做法还是有问题,设计上做**,
理论上不会存在运行时库的问题。

15# McuPlayer
 楼主| McuPlayer 发表于 2012-9-13 11:45 | 显示全部楼层
overlay的方式,还有些问题,就是平台必须和APP一并编译。

我想做成APP可独立编译的,把他做成一个SDK
目前我是通过把API函数固定地址的方式,叫APP去访问平台函数的。
nextkey 发表于 2012-9-13 22:24 | 显示全部楼层
API固定的办法也是可以实现的
overlay的方式,还有些问题,就是平台必须和APP一并编译。 我想做成APP可独立编译的,把他做成一个SDK 目前我是通过把API函数固定地址的方式,叫APP去访问平台函数的。 ... McuPlayer 发表于 2012-9-13 11:45
 楼主| McuPlayer 发表于 2012-9-18 17:18 | 显示全部楼层
请教楼上,比如说C++库里的new和delete是必须使用的

现在C++的lib在平台上,我在APP中每个C++类的创建都会自动引用平台中的new和delete库,请问如何处理?
 楼主| McuPlayer 发表于 2012-9-18 17:19 | 显示全部楼层
或者APP中再加入一次C++库也可以接受,但必须APP和平台保持无关联
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:善待今天就是对未来最好的策划。 博客:http://www.mcuplayer.com

338

主题

7307

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部