一、程序的加载地址
程序被加载到RAM中的地址;这个不能由编译器决定、也就是不能由编译参数决定!由该模块的调用者决定!
因为程序在nandflash中不能运行,所以需要加载到RAM中。
一般我们必须在运行该程序前,将程序加载到运行地址处。
即在代码设计时:
在跳转至运行地址变量前,必须先完成代码搬运部分工作。
二、程序的运行地址
这个地址可以由编译器的编译参数来决定。
目标文件中各功能块(函数或变量)的相对地址:只是一个偏移量,它在编译阶段已经确定;
程序运行绝对地址:整个程序运行时的首地址,在连接阶段才确定。
说明:程序、包括其中各个功能块的绝对地址,是将连接阶段给的首地址加上编译阶段确定的偏移量相加后的值。
eg:
armcc -c hello.o hello.c //hello.o中确定了偏移量
armlink hello --ro_base 0x30000000 hello.c //hello中确定了首地址结论:加载地址和运行地址没有任何关系!但如果该模块不支持PICARM位置无关代码设计,即位置无关代码、则必须将加载地址设置为和运行地址相同,反之、则没有这个约束。