keil4使用方法入门——基于ARM9的程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先创建一个空文件夹来存在工程(Keil不会为我们创建工程文件夹)。
Open keil > project > new uVision Project > 输入工程名称> SAVE
在建立的文件夹里新建一个文本文件,格式修改为.s
在project窗口中右击Source Group1,选择Add files to source group 1,在弹出的窗口中选中刚才建立的.s文件,然后点击ADD,再点击close弹出的窗口。可以看到project窗口出现了我们添加的.s文件。
Flash > configure flash tools….,弹出如图
Device选项里可选择要仿真的处理器,我们选择ARM9 (little end)小端。
Target选项里可设置ROM/RAM起始地址,这里的起始地址要跟Linker选项里的地址一致。CODE Generation设置成ARM-mode
接下来在.s文件里编写我们的ARM汇编,如下。
;在ARM状态下生成由64个整数构成的数组的初始值。
;在THUMB状态下将上述数组复制到一个新的地址,并转换成字符数组
;再返回ARM状态,计算Thumb状态下所产生数组所有元素值的和。
AREA block, CODE, READONLY
N EQU 64
FIR EQU 0x01
ENTRY
start
;送数组入口地址
LDR R0, =A
MOV R3, #N-1 ;init counter
LDR R4, =FIR ;init the first number of A array
init64 ;produce 64 numbers
; CMP R3, #0
; BEQ init_finh
STR R4, [R0], #4
ADD R4, R4, #1 ;
SUBS R3, R3, #1 ;递减
BPL init64 ;循环
;init_finh
LDR R0, =A
LDR R1, =B
MOV R3, #N*4-1 ;init counter
ADRL R7, change+1
BX R7 ;处理机状态切换为THUMB CODE16
;复制转换
change
; CMP R3, #0
; BEQ change_finh
LDRB R2, [R0] ;读取字节
; ADD R2, #65 ;转换为字符
STRB R2, [R1]
ADD R0, #1
ADD R1, #1
SUBS R3, #1
BPL change
;change_finh
LDR R1, =B
MOV R3, #N*4-1
ADR R7, sum ;状态切换
BX R7
CODE32
sum
LDRB R0, [R1], #1 ;计算和,结果保存在R0中
sum_loop
; CMP R3, #0
; BEQ sum_finh
LDRB R2, [R1], #1
ADD R0, R0, R2
SUBS R3, R3, #1
BPL sum_loop
;sum_finh
loopup
B loopup
AREA datablock, DATA, READWRITE
A SPACE 64*4
B SPACE 64*4
END
保存文件夹,然后build 。