程序各段由__main复制与手动复制有何区别

[复制链接]
2231|3
 楼主| m5t133 发表于 2010-3-23 11:21 | 显示全部楼层 |阅读模式
在研究ADS的启动代码时,我发现很多示例都是手动将程序的各个段由加载域复制到运行域,在没有链接C库时,这是必要的。
但看了下ADS的说明文档,上面介绍说系统硬件及栈初始化后直接调用__main就可以完成上述段的复制工作,为什么这么多链接了C库例程采用手动复制的方式呢,是徒增麻烦还是有其它作用?
另外,我将一个手动复制的例程去掉其手动复制段的代码,改为导入C运行库入口函数,发现程序没法启动?可能的原因是什么?
xinzha 发表于 2010-3-23 16:05 | 显示全部楼层
按照道理来说,只要按照scatter的规定格式和语法写,自己复制还是库函数复制是一样的。猜想是工程中有些很特殊的地方,或者用了自己的工具把多段二进制拷贝到一起而没有相应的scatter输出,这样库函数就无法知道该如何放置各个相应的段了。
sassos 发表于 2010-3-24 16:46 | 显示全部楼层
这个问题我也比较疑惑,很多例程中重映射是手动完成的,接下来却再调用__main.我个人有点怀疑ADS的__main函数的重映射执行过程.查了许多资料得不到很明确的答案,干脆就自己固定了一个复制模式.
 楼主| m5t133 发表于 2010-3-24 18:31 | 显示全部楼层
__main可以重映射,映射的主要目的是跳过段复制过程而直接进入到库初始化过程。即用手动复制代替MAIN的自动复制过程。我就是不知道为什么要手动而不用自动
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

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