Part9---代码搬移不可少

发布者:ShimmeringStar最新更新时间:2024-10-12 手机看文章 扫描二维码
随时随地手机看文章

1、回顾ARM启动流程就可知道需要执行代码搬移

2、代码搬移

1)起点:NAND FLASH,今天的起点是SRAM垫脚石。为什么?因为我们要从nandflash取搬移数据需要先对其进行初始化,二而我们并没有初始化;垫脚石SRAM起始地址:2440为0,6410为0x0c000000,210为0xd0020000;那么我们就从对应的地址去搬移代码。

2)终点:

链接地址:可以通过反汇编来查看,arm-linux-objdump -D -S gboot.elf >dump.

在一段c程序代码中,通过调用子函数,那么会使子函数的链接地址赋值给pc指针,在一段汇编代码中,使用ldr pc,=reset,使标号reset处的汇编赋值给pc指针。

相对跳转和绝对跳转

绝对跳转:是直接去修改pc指针。

相对跳转:使用b或者bl这种指令产生的就是相对跳转,并不是直接去修改pc指针,而是去修改相对标号之间的差值。

在.lds脚本文件中的链接起始地址为0x50008000,那么我们的第一行代码就会出现在0x50008000地址,然后往后排布程序。那么链接起始地址就作为我们的终点。

3)搬移方式


引用地址:Part9---代码搬移不可少

上一篇:Part2_lesson1---arm家族大检阅
下一篇:Part10-C语言环境初始化-栈初始化lesson1

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved