我说的也有问题。应该是,如果链接脚本里面只指定了data段运行时地址没有指定加载地址时,data段是直接放在0x30000000的地方,可以看到编译出来的bin文件很大。和直接在Makefile文件里面直接指定data段地址的效果是一样的,所以为了减少不必要的空间浪费,增加一个加载地址,把data段拼接到代码段的后面,这样编译出来的bin文件就小很多。
但是这样是运行是访问不到data段的数据的,因为main函数里面访问data段的数据时,是直接访问0x30000000这个地址,而实际上data段被放在了代码段的后面,所以就要在start.S里面做重定位的动作,把data段数据从0x800拷贝到0x30000000。
我说的也有问题。应该是,如果链接脚本里面只指定了data段运行时地址没有指定加载地址时,data段是直接放在0x30000000的地方,可以看到编译出来的bin文件很大。和直接在Makefile文件里面直接指定data段地址的效果是一样的,所以为了减少不必要的空间浪费,增加一个加载地址,把data段拼接到代码段的后面,这样编译出来的bin文件就小很多。
但是这样是运行是访问不到data段的数据的,因为main函数里面访问data段的数据时,是直接访问0x30000000这个地址,而实际上data段被放在了代码段的后面,所以就要在start.S里面做重定位的动作,把data段数据从0x800拷贝到0x30000000。
举报