关于代码重定位的个人理解


一、为什么需要代码重定位?

因为Flash上的一些读写特性!
例如:S3c2440的CPU可以直接给SDRAM、NOR FLASH发送命令,但是不能给NAND FLASH发送命令,也就是说CPU无法从NAND获取代码然后执行;
若程序拷贝到NADN上启动,则NAND FLASH启动时,会将NAND前4K内存拷贝到SDRAM中,然后从SDRAM的0地址开始执行;
那么如果可执行程序大于4K呢?
那么这4K的代码就要作为引导,将整个程序读出来,放到SDRAM(即代码重新定位);
有的同学可能就会问,NAND不能用,那么我用NOR不就行了嘛,但是同样,NOR的特性是能像内存直接读,但是不能像内存直接写,因此需要把全局变量和静态变量保存在SDRAM中,才能进行修改:
两个方法如下:
第一个方法
    把数据段和代码段靠在一起;
    烧写在Nor Flash上面;
    运行时把数据段的(全局变量)复制到SDRAM,即0x3000000位置(重定位);
第二个方法
    让文件直接从0x30000000开始,全局变量在0x3……;
    烧写Nor Flash上 0地址处;
    运行会把整个代码段数据段(整个程序)从0地址复制到SDRAM的0x30000000(重定位);
 其中主要涉及SDRAM.lds 链接脚本的修改;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值