重定位一般有两个目的:
①、程序文件过大,这时候需要把超出储存器(NorFlash或SRAM)部分的代码,“放到”(也即重定位)SDRAM中去执行;
②、程序烧写在NorFlash并且使用了全局变量。
这篇文章着重解析第二个目的,对于第一个目的后续有时间再写。
如果你的程序是烧写在NorFlash中,并且程序里使用了全局变量(不包括静态全局变量,下同),那么你就需要重定位了。为什么?
因为:
①、全局变量是保存在程序文件里的
②、NorFlash可以像SRAM一样读数据,但是不能像SRAM简单地写数据
所以程序运行时可以读取这个全局变量,但是不能写这个全局变量,因为该全局变量储存在NorFlash里面。