代码搬移

2440初始化:

  一般我们都让芯片从Nandflash启动(Nandflash不参与统一变址),SRAM的前面4KB的容量把Nandflash里面前4KB字节的代码往里复制,然后如果Nandflash里面的代码量大于4KB,那么就把SRAM就把Nandflash里面剩余的代码复制进内存,然后再从内存里面启动。

copy_to_ram:
ldr r0, =0x00000000
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

 绝对跳转:就是直接给pc指针赋值

相对跳转:就是以链接器脚本文件里的起始地址为基准,往后的代码的地址和起始地址的差值赋给pc指针,比如起始地址位0x30008000,而reset的地址是0x30008058,所以赋给pc指针的只就是0x58。

2440、6410、210的这部分代码不同之处在于,起始地址和结束地址。

6410起始地址是0x0c000000,结束地址是0x50008000

210起始地址是0xd0020010,结束地址是0x20008000


原文地址:https://www.cnblogs.com/sanshijvshi/p/8367524.html