首页 > 学院 > 开发设计 > 正文

专题9-代码搬移

2019-11-08 19:48:52
字体:
来源:转载
供稿:网友

前面一节已经完成了内存的初始化,以mini2440为例,要完成bootloader的启动,在板子上电后,cpu会自动将nand Flash中前4kb的内存拷贝到SRAM(垫脚石)中,再由垫脚石将nand flash中剩余的代码拷贝到内存中。但是nand flash还没初始化,可以尝试将SRAM中的代码搬移到内存中去:

SRAM的起始地址为0 内存的地址是0x30080000

代码如下:

bl copy_to_ramcopy_to_ram: ldr r0, =0x0 ldr r1, =0x30008000 add r3, r0, #1024*4copy_loop: ldr r2, [r0], #4 str r2, [r1], #4 cmp r0, r3 bne copy_loop mov pc, lr

注意:b和bl都是相对跳转,比如在链接器脚本中,.start的起始地址是0x30080000,但并不是将0x30080000赋值给pc指针,程序第一步跳转到reset处,又反汇编可以看到reset的地址为0x3008058,pc指针的值=跳转pc+偏差=0+0x58=0x58


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表