专题9-代码搬移

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvjianxin6015/article/details/55225473

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

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

代码如下:

bl copy_to_ram

copy_to_ram:
    ldr r0, =0x0
    ldr r1, =0x30008000
    add r3, r0, #1024*4

copy_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

猜你喜欢

转载自blog.csdn.net/lvjianxin6015/article/details/55225473
今日推荐