这两天突然心血来潮,想学习一下ARM汇编指令,对我这样一个入门汉,这其中的挫折真的是让我万般无奈,我看的是王爽老师的《嵌入式arm汇编程序设计》视频教程,看到差不多一半情况下,终于迫不及待的准备去动手操作一番,结果在配置环境阶段就受阻了。网上看到的arm集成开发工具有很多,什么realview ,ads ,iar beanch,但我只想安装视频教程里面的那个codewarrior for realview,但始终是搞不定。
其实我的要求很简单,就是能写汇编,能debug,能看寄存器的内容~ 最后折腾了好久,终于让我给搞定了,我总结一下我的配置过程,供后来着参考,也不至于像我一样搞个环境就搞了那么久。
Keil uVersion环境配置
环境:win7
下载
新建项目
- 选择Project -> new uVersion Project ->输入项目名称,点保存。
- 新建c文件,在Source Group 1右键,选择Add New Item to Group
输入文件名称,点击add完成,如果你的工程缺少上面的绿色CMSIS和Devices情况下,此时编译会报如下错误
.\Objects\Demo.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
.\Objects\Demo.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.
这是因为缺少运行环境,只需要配置一下即可。
点击上面第二张图标注的“环境配置”按钮会弹出以下界面,我们勾选红圈里面的选项,然后点确定,我在这个地方也卡了好长时间。
再次编译,不再有错误信息啦,不过不要高兴的太早,后面还有错误等着我们呢。
C代码调试
在调试前,我们还需要配置一下debug选项,选中使用模拟器按钮。
配置好了后,我们点击debug按钮就能跳转到debug页面,能看到汇编的代码了~
说完C代码的调试,我们现在再尝试一下汇编代码的调试吧~
ARM汇编调试
现在我们就可以开始写汇编代码了,我的demo1.s的代码如下:
AREA ARMex, CODE, READONLy
ENTRY
EXPORT Main
Main
mov r0, #10
mov r1, #100
add r0, r0, r1
stop
b stop
END
上面这段代码是有问题的,当你进行build的时候,它会报如下错误:
.\Objects\asm_1.axf: Error: L6218E: Undefined symbol main (referred from __rtentry2.o).
从错误信息能看出来是因为我们没有定义synbol main,其实我们只要把我们demo1.s的函数名称改成跟设备的Reset_Handler里面的一样就会没问题,对初学者来说,这个问题很容易出现。
需要注意的是,如果你是按照我截图里面一样,选择的设备是ARMCM0,那么还会出现如下错误:
demo1.s(5): error: A1859E: Flag preserving form of this instruction not available这是错误原因官网是如下解释的,我们把mov指令改成movs就不会有问题了。
其实除了修改代码,另外一种解决方式就是修改设备。
到此,我们的编译不再有错了,随后的debug跟上面差不多,就不再说了。
虽然写出来没多少篇幅,但是真正在遇到上面这些问题的时候,对我这个初学者来说,真的花了不少时间~真的是万事开头难。