打印

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

[复制链接]
1395|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

粉丝