【转】ARM学习经验(一)
0赞看到likezk的ARM学习经验帖子,深有感触,转载于此,以餮读者。
现在ARM处理器优点突出,正在日益成为嵌入式领域的标杆,大家上招聘网站看下就知道了,电子工程师岗位基本上都要求熟悉ARM或DSP,熟悉linux下程序开发。这对我们都是个挑战啊,为了赶上这班车,自己也开始了ARM学习之旅。以后,我会把自己的过程和体会贴上来,给和我一样的初学者共勉交流。欢迎大家捧场啊。嘿嘿。
入门
学习arm知识,首先要有本教材,电子版的网上有很多,但是用起来不方便,建议还是买本纸质教材,投资总是需要的,推荐清华出版社的《arm体系结构与编程》。之所以推荐这本书,是因为开头几篇对ARM中通用的指令集,寻址方式等叙述详尽,入门时可以拿来学习,以后使用中还可以当手册随用随翻。
首先要看arm的指令集,没必要生搬硬记,但要看到能够大概知道是什么意思,特别是立即数的问题以及寻址方式最好能搞明白,这样对后面理解程序有非常大的帮助。我是结合分析Startup文件进行学习的,感觉方法对路,呵呵。由于这本书是针对arm体系结构讲的,不特指某款MCU,所以,在接下来的学习中还要再找具体学习的那款MCU的资料。
学习arm,最好还是买款开发板,个人觉得周立功的easyarm2131非常适合学习,特别是配套资料比较全,省得自己去网上再找了,我的学习过程以下就针对这套开发板进行了(俺当初选择它,主要是图便宜,后来才知道这个21XX的没有MMU不能上linux和wince,有点后悔)。
2131开发套件带的那本书感觉挺好,虽然没啥太多的技术含量,有点像是2131手册的中文版,不过,对于初学者来说,确实够详尽的。刚开始的时候,建议不要去抠里面的例子,先拿来当中文手册用,尽量快的了解这个MCU的功能模块,了解这些,你才能知道这个东东能干啥,先建立个感性认识。
了解了arm的指令集,熟悉了LPC2131这款MCU的片上模块资料,下面就该通过程序进行具体学习了。在这时候,你会遇到开发工具的问题,原来这个开发板配套资料都是针对ADS写的,现在都流行用MDK了,这中间的区别还是有的,特别是针对初学者还是蛮大的,我刚开始的时候也是一头雾水,呵呵。
MDK试用版可以到REALVIEW的中国网站下载,当然了,网上也有破解版的,大家可以自己找找看了。首先要了解程序运行的整个过程,熟悉要使用的开发环境,MDK自带的帮助大家一定要看看,反正是中文的,看起来也不麻烦,嘿嘿。这里面重要的是对startup的理解,存储空间影射的概念和具体实现。了解arm程序的整个执行过程。
arm程序的执行流程
对arm程序的执行流程,开始网上找了好半天,都没有什么现成的。我也是根据keil提供的例子,一步步调试跟踪,再加上自己原来写c51程序的经验,逐渐摸索出了大概,刚开始上电后执行的是startup.s程序,然后到_main,retarget.c,等等,最后才到我们的main函数,而且main函数执行完,还要返回到keil提供的系统程序中,这就是为什么我们的main函数必须是int类型的道理了,这个过程学习的时候要有个概念就行了,不用死记,理解才是正道。后来,偶然在网上发现了段视频,里面对这个运行过程讲解的很清楚,是西安毕博公司的,把网址提供给大家,都可以下载下来看看。http://www.beable.com.cn
存储空间影射的概念和具体实现
存储空间影射概念也会成为初学者的疑问,我当初可是迷惑了一段时间,虽然大概知道影射的意思,但到底实现过程是什么,总有些糊涂。2131的配套教程也没有明确的写出来,直到后来在网上偶然间发现了篇帖子,里面也是一个同道者的经验体会,里面有一小部分内容看完后才感到豁然开朗了。后来想想,2131的配套书里也都提到了,但就差那么一点,没有直接捅破,总让人稀里糊涂(也可能是我有点笨哦,嘿嘿)。我把这个截了下来也传上去,需要说明的是,这个同道者是按照LPC2104的结构讲述的,这个和LPC2131的结构有所区别,但是过程都是一样的,大家别死抠。再次向这位同道者表示感谢!!!
keil3光标和汉字问题解决办法
我在keil for ARM的使用中碰到的,从网上搜索得到的答案,也发上来,如果大家需要就不用到处找了。
使用keil3,光标总是定位不准,修改十分麻烦,解决办法是:
找到keil3的安装目录,用UEdit打开tools.ini文件,
找到EMAIL="******"这一行,
在下面新增加一行,内容为:
ANSI=1
然后保存,重新打开keil3,问题就搞定了!
输入汉字的时候,字形也总觉得不舒服,如下改变后,就顺眼多了:
选择菜单项Edit->Configuration->Color&Fonts选项卡->ARM:Editor C Files(C语言编辑器,相应的选择其他项便可设置其他)-Text->点击font后的按钮,选择中文字体(如仿宋)->确定,重新打开keil3,问题解决!