- 论坛徽章:
- 0
|
救命阿...现在情况main.c 里面的start_kernel 用printascii 印出字串,结果没显示
在kernel/head.S 里面的__turn_mmu_on 用printascii 印出字母,也没显示
然后我在compressed/head.S加入印出行数的指令,发现一直卡在clear BSS的地方,它就一直重复,程式码如下:
not_relocated: mov r0, #0
1: kputc #'\n' //印出273
kputc #'2'
kputc #'7'
kputc #'3'
kputc #'\n' //印出r0
kphex r0, 8
kputc #'\n' //印出r2
kphex r2, 8
kputc #'\n' //印出r3
kphex r3, 8
str r0, [r2], #4 @ clear bss
kputc #'\n'
kphex r2, 8
str r0, [r2], #4
kputc #'\n'
kphex r2, 8
str r0, [r2], #4
kputc #'\n'
kphex r2, 8
str r0, [r2], #4
kputc #'\n'
kphex r2, 8
kputc #'2'
kputc #'8'
kputc #'1'
kputc #'\n'
cmp r2, r3
blo 1b //若r2<r3,则跳到前面的TAG 1
bl cache_on
他大概的意思就是,把BSS全部设为0,r0=0,r2=BSS start address,r3=BSS end address,做store的动作,把r0存到r2所指到的位址,做完之后r2 =r2+4,开始将bss里头的值都初始化成0,(cmp r2, r3,blo 1b,) 确认一下是不是到了bss的底部,不到底部的话,jump到(1: kputc #'\ n') 继续做搬移的动作。做完bss初始化jump cache_on (bl cache_on)
印出来讯息如下:
SMDK2443 # go 30008000
## Starting application at 0x30008000 ...
0000000D
30008000
1
175
0000000D
0000000D
2
3000836C
00000000
3
00000000
00000000
273
00000000
0000000D
50004000
0000000D
0000000D
0000000D
0000000D
281
273
00000000
0000000D
50004000
0000000D
0000000D
0000000D
0000000D
281
我发现...它r2好像没加4(就是0000000D),结果就一直循环... |
|