/* 为调用C函数准备环境 */
ldr sp, =8*1024
bl sdram_init
/* 重定位代码 */
/* 把程序的代码段、数据段复制到它的链接地址去 */
adr r0, _start /* 获得_start指令当前所在的地址 : 0*/
ldr r1, =_start /* _start的链接地址 0x50000000 */
ldr r2, =bss_start /* bss段的起始链接地址 */
cmp r0,r1
beq clean_bss
copy_loop:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bne copy_loop
/* 把BSS段对应的内存清零 */
clean_bss:
ldr r0, =bss_start /*定义在lds链接脚本之中
ldr r1, =bss_end /*同上
mov r3, #0
cmp r0, r1 /*程序中设置BBS段?*/
beq on_ddr
clean_loop:
str r3, [r0], #4
cmp r0, r1
bne clean_loop
on_ddr:
/* 调用C函数 */
ldr pc, =main /* pc等于main的链接地址 注意这里不是MOV PC,main 因为这里是使用链接地址,而不是指令所在的位置*/
DDR2 复制iram中的前8K代码到ddr中的实现方法
最新推荐文章于 2022-10-11 23:15:00 发布