韦东山ARM裸机学习笔记——代码重定位

前言

以下所写的内容都是基于韦东山JZ2440开发板的,更多内容可参考韦东山第一期ARM裸机视频代码重定位章节或韦东山S3c2440代码重定位详解学习。

 

一、什么是代码重定位?

代码重定位就是将代码的text段、rodata段、data段等从一个地址搬移到另外一个地址。本来程序烧写好之后是在某一个地址开始运行的,经过代码重定位之后,可以在另外一个地址运行。例如:程序烧写在Nor Flash上,本来是在Nor Flash上的0地址开始运行的,通过代码重定位,把数据段或整个程序搬移到SDRAM的0x30000000地址运行。

 

二、为什么要代码重定位?

 1、程序烧写在Nand Flash上的情况

(1)Nand Flash程序的启动流程:当我程序烧写在Nand Flash的时候,CPU是无法从Nand Flash中取代码执行的,开机上电的时候Nand启动硬件会自动把Nand Flash前4K复制到CPU的内部SRAM里面,然后CPU从内部SRAM的0地址开心执行代码。

(2)存在问题:如果当我们的程序大于4K的时候,内部SRAM就不够存放Nand Flash的程序了,因为SRAM的大小只有4K。

(3)解决程序大于4K的方法:在程序设计时,设计程序的前4K代码实现将整个程序读出来放到外部的SDRAM。

将Nand Flash上的整个程重定位到SDRAM

 

2、程序烧写在Nor Flash上的情况

(1)Nor Flash程序的启动流程:Nor Flash的基地址为0,片内RAM地址为0x4000 0000;CPU读出N

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值