打印
[应用相关]

有关程序区段的搬移,有点迷迷糊糊的……

[复制链接]
1202|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-10-25 19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      有关有关程序区段的搬移,前几天系统组的主管在教我们开发环境相关的知识时有提到过,当时听的迷迷糊糊的,后来回家从头号到尾想了一遍,除了细节外,整个流程应该都了解了吧。
    我认为原理很简单,就是“有设定初值的全局变量”。必须被存储在执行文件里、被烧录到ROM里,但执行者时因为这些全局变量的值可能会被程序改变,当然不能在ROM里运行,链接时必须重寻址到RAM里;就是这种“存储在ROM,在RAM执行”的特性,所以才有搬移date段的需求,而且必须在所有程序使用全局变量之前完成这件事。
    我觉得比较麻烦的是LAM 与VMA的定义,我老是会把它们搞混,此外,在link script中定义可以在程序中使用的变量名称,对我个人来说,这的确是令人印象深刻的新概念。

   惯于写作PC程序的工程师应该会认为“全局变量可以被设定初值”是天经地义的事情吧。却不知这是因为windows或Linux上的编译工具帮每一个程序加了称为startup code 的程序代码。startup 就像boot  loader一样,负责为使用者和程序配置合理的执行环境,其中当然包含配置stack\heap的空间,以及设定全局变量的初值等。pc程序可以这么做是因为PC的CPU可以实现虚拟内存,每一个程序有自己的地址空间,所以每一个程序中各个区段的起始地址可以是一样的,为就是为什么编译工具可以白日做梦所有使用者程序通用的startup code.
     哈哈,把语法弄懂之后,会发现其是很简单的。LAM 和VAM 的观念不要搞混,总之记得前者是存储地址,后者是执行地址就不会弄错了。
沙发
黄小俊| | 2013-10-25 19:52 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝