垫脚石的尺寸可能无法满足代码的大小,需要将代码拷入内存中进行运行。
本次博客写作时,没有flash的初始化的内容,因此本次先从6410的垫脚石SRAM中向内存拷贝代码。
6410的垫脚石有8KB,目前自己编写的bootloader远远没有这么大,因此,上电之后,Bootloader会全部被拷贝到垫脚石中,只需要从垫脚石向内存拷贝就可以了。
如下图所示:
从SRAM向内存中拷贝代码:
copy_to_ram:
ldr r0, =0x0c000000 @垫脚石的起始地址
ldr r1, =0x50008000 @拷贝的目标位置
add r3, r0, #1024*4 @拷贝4KB的内容
copy_loop:
ldr r2, [r0], #4 @加载并增加地址
str r2, [r1], #4
cmp r0, r3
bne copy_loop
mov pc, lr
需要注意的是,对于210开发板,在垫脚石的前16字节的内容是加头的信息,是给BL0用的,不需要拷入内存中,因此搬移的其实地址就要加上16,变为0xd0020010。