系统启动阶段的代码我还是比较喜欢用汇编,可以对ARM的指令更了解一些,我用汇编改写了韦老师的led例子,代码如下 .equ GPBCON, 0x56000010 .equ GPBDAT, 0x56000014 .equ GPB5_out, (1<<(5*2)) .equ GPB6_out, (1<<(6*2)) .equ GPB7_out, (1<<(7*2)) .equ GPB8_out, (1<<(8*2)) .equ GPBVALUE, (GPB5_out | GPB6_out | GPB7_out | GPB8_out) .text .global _start _start: ldr r0, =0x53000000 mov r1, #0x0 str r1,[r0] //disable watchdog ldr r0, =GPBCON ldr r1, =GPBVALUE str r1, [r0] bl led_loop halt_loop: b halt_loop led_loop: ldr r0, =GPBDAT mov r1, #0x05 loop: mov r3, #0x01 mov r3, r3, lsl r1 //r3 <<= r1 mvn r3, r3 //r3 = ~r3 str r3, [r0] add r1, r1, #1 cmp r1, #9 moveq r1, #5 ldr r4, =0x10000 bl wait b loop nop nop mov pc, lr wait: sub r4, r4, $1 cmp r4, #0 moveq pc, lr nop nop b wait