就不对着数据手册说有寄存器了,首要说说ARM汇编和GNU汇编的差异,曾经用RVDS2.2用的汇编程序都真ARM汇编。到用eclipse用的是编译u-boot或许内核的arm-linux-gcc,这次用的汇编要用GNU汇编,编译时交给arm-linux-gcc来做剩余的作业。
本来的一个RVDS2.2下的汇编LED程序是这样的:
WTCON EQU 0x53000000 ;看门狗操控寄存器地址GPBCON EQU 0x56000010 ;GPB操控寄存器GPBDAT EQU 0x56000014 ;GPB数据寄存器AREA Init,CODE,READONLY ;声明代码段ENTRY ;一共程序进口CODE32 ;声明32位ARM指令START ldr r0,=WTCON ;关掉看门狗mov r1,#0x0str r1,[r0]ldr r0,=GPBCON ;设置GPB5为输出mov r1,#0x400 str r1,[r0]ldr r0,=GPBDAT ;设置GPB5为低 点亮LED1mov r1,#0str r1,[r0] LOOP b LOOPEND
改成GNU汇编是这样的:
;/;*试验要求:创立发动代码汇编文件;*功用描绘:初始化一些有必要的寄存器;*日 期:2013-04-07;*作 者:kangear;/.equ WTCON, 0x53000000 @看门狗操控寄存器地址.equ GPBCON, 0x56000010 @GPB操控寄存器.equ GPBDAT, 0x56000014 @GPB数据寄存器@ AREA Init,CODE,READONLY @声明代码段@ ENTRY @一共程序进口@ CODE32 @声明32位ARM指令.text.global _start_start:ldr r0,=WTCON @关掉看门狗mov r1,#0x0str r1,[r0]ldr r0,=GPBCON @设置GPB5为输出mov r1,#0x400 str r1,[r0]ldr r0,=GPBDAT @设置GPB5为低 点亮LED1mov r1,#0str r1,[r0] LOOP:b LOOP.end
EQU变成的.equ; AREA变成了.text; “;”变成了”@”; 裸机都GNU了。东西不多,调试的呈现的问题说一下,单步调试到最后一句会呈现如下提示:
这个不是什么过错,eclipse在说:这句是一个死循环!依照它的意思往下调试就没有意义了。这就相当于while(1);仅此而已。