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

一、程序的加载地址

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

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

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

即在代码设计时:

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

二、程序的运行地址

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

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

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

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

eg:

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

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

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

你可能感兴趣的:(《C编译原理》程序的加载地址与运行地址)