《C编译原理》程序的加载地址与运行地址

一、程序的加载地址

程序被加载到RAM中的地址;这个不能由编译器决定、也就是不能由编译参数决定!由该模块的调用者决定!

因为程序在nandflash中不能运行,所以需要加载到RAM中。

一般我们必须在运行该程序前,将程序加载到运行地址处。

即在代码设计时:

在跳转至运行地址变量前,必须先完成代码搬运部分工作。

二、程序的运行地址

这个地址可以由编译器的编译参数来决定。

目标文件中各功能块(函数或变量)的相对地址:只是一个偏移量,它在编译阶段已经确定;

程序运行绝对地址:整个程序运行时的首地址,在连接阶段才确定。

说明:程序、包括其中各个功能块的绝对地址,是将连接阶段给的首地址加上编译阶段确定的偏移量相加后的值。

eg:

armcc -c hello.o hello.c  //hello.o中确定了偏移量

armlink hello --ro_base 0x30000000 hello.c  //hello中确定了首地址

结论:加载地址和运行地址没有任何关系!但如果该模块不支持PICARM位置无关代码设计,即位置无关代码、则必须将加载地址设置为和运行地址相同,反之、则没有这个约束。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值