首页 ARM初学者

ARM初学者

举报
开通vip

ARM初学者一、不要去管thumb指令,这个东西可以暂时放一放。也就是说,基本上看到thumb这个字眼就可以跳过去。写书的人追求全面,不代表我们一开始学习的时候就要面面俱到。 二、不要去死记硬背ARM指令。知道怎么回事就可以了,用的时候去查书。你经常用到的指令也就那么几条,当你学到一定境界的时候再回过头来看它。但是要知道一些面上的知识,比如条件执行,寻址方式等等。 三、弄清楚ARM的寄存器组织,知道37个寄存器是怎么回事,哪些是公用的,哪些是私有的。 四、学一下异常处理,最少要把IRQ和FIQ产生的原因、处理的办法及返回形式弄...

ARM初学者
一、不要去管thumb指令,这个东西可以暂时放一放。也就是说,基本上看到thumb这个字眼就可以跳过去。写书的人追求全面,不代表我们一开始学习的时候就要面面俱到。 二、不要去死记硬背ARM指令。知道怎么回事就可以了,用的时候去查书。你经常用到的指令也就那么几条,当你学到一定境界的时候再回过头来看它。但是要知道一些面上的知识,比如条件执行,寻址方式等等。 三、弄清楚ARM的寄存器组织,知道37个寄存器是怎么回事,哪些是公用的,哪些是私有的。 四、学一下异常处理,最少要把IRQ和FIQ产生的原因、处理的办法及返回形式弄懂。 五、接触到具体芯片时,没有必要把所有的功能一下子全搞清楚。可以先跑跑GPIO,哪怕是跑个流水灯。后面可以跑跑串口什么的,建议先用汇编玩,主要是为了摸清楚最底层的东西。 六、操作系统?还是先放一放吧,这个东东比较麻烦。如果你想搞清楚它是怎么回事的话,一些基础知识还是要补一下的。比如操作系统原理、编译原理等等。用UC/OSII比用ucLinux要好一些,因为它更简单。当然了,如果你只是想玩一玩,模仿就足够了。没必要去弄清楚细节方面的东西,但是如果你想进入更高的层次,基础的东西还是回避不了的。 以上纯粹是一家之言,每个人都有自己的看法。 他人建议: 我认为初学ARM 首先用C编程,不要去管汇编;找简单的ARM7入门,不要一开始就选ARM9;用KEIL这个编译环境,本人觉得ADS这个编译环境不适合入门。ARM7最好选择LPC(推介用214X系列或者是22系列,更低级的系列纯粹就是高级点的单片机)系列的入门,他比44B0好入门多了 如果要选择操作系统,首先选择UC/OS-2 选择ARM的软件集成开发环境 目前,流行的ARM软件集成开发环境有ADS1.2、Keil uV3和IAR等。对于51单片机应用开发工程师来说,Keil开发环境应该应用得比较熟练,若采用Keil uV3进行ARM软件开发,应该可以快速上手。但是,我们并不推荐ARM初学者选择Keil uV3进行ARM软件开发,主要是基于以下2个原因: (1)Keil uV3是第三方ARM软件集成开发环境,目前支持的ARM芯片种类还不多,所带的编译器也并不完善; (2)由于Keil uV3为了方便用户的开发,提供了现成的ARM启动文件,换句话说,它屏蔽了ARM开发中的一个重要内容——启动代码的编写,而这一点对初学者来说应该是非常重要的内容。 IAR目前国内应用的人还不多,相关资料也不是很多,所以我们也不推荐初学者使用。 ADS1.2集成开发环境是ARM公司推出的ARM核微控制器集成开发工具。它支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAG硬件仿真调试,支持汇编、C、C++源程序;具有编译效率高、系统库功能强等特点;可以在Windows 98、Windows 2000、Windows XP以及RedHat Linux上运行。 本开发板配套的所有实验都是采用Wiggler板+H-JTAG调试代理软件,在ADS1.2集成开发环境下进行编写及调试的,非常方便。 基于以上原因,我们推荐ARM初学者使用ADS1.2集成开发环境进行ARM开发。关于ADS1.2集成开发环境的使用,初学者可以参看ADS1.2集成开发环境自带的用户手册。另外,向ARM初学者推荐一本关于ADS1.2集成开发环境使用的好书——ARM开发工具ADS原理与应用 赵星寒 刘涛著 北京航空航天大学出版社 2006年2月第一版。 .拿到一个开发板后,不要盲目下手做实验! 由于对ARM的神秘感以及初学者的好奇心理,很多ARM初学者在收到我们的开发板后,恨不得一口气就把所有的实验都做完,这样的做法我们坚决反对。由于初学者盲目下手做实验,可能很多实验都做不出正确的结果,甚至损坏开发板,因此我们建议初学者经过下面的几步来进行实验: (1)收到开发板后请仔细检查所有配件是否齐全或损坏,若有问题,请及时联系我们; (2)请认真阅读配套光盘中的“ARMSKY-LPC213X_214X教学实验开发板使用手册.pdf”文档,熟悉开发板的硬件资源; (3)请认真阅读配套光盘中的“如何在ARMSKY-LPC213X_214X教学实验开发板上运行第一个实验程序.pdf”文档,以便在开发板上进行第一个实验。 经过以上三步,用户就应该能够在开发板上做出第一个实验了。接下来,用户可以依次将所有配套实验做一遍,看看都会出现哪些实验效果。 5.如何做好每一个配套实验,达到最好的学习效果? 开发板配套了60多个实验,几乎涵盖了213X/214X系列芯片的所有内部功能器件的使用。初学者如何充分利用这些配套实验进行学习,对于是否能真正掌握ARM嵌入式开发起着决定性作用。然而,很多初学者对这一点认识不足,很多都是把这些实验在开发板上做一遍就认为已经掌握了ARM开发,其实不然,只把这些实验在开发板上做一遍,顶多算是对实验结果进行了验证,根本没有达到掌握ARM开发的目的。因此,我们建议初学者按下面的步骤进行实验: (1)将配套实验先在开发板上运行一遍,观察实验结果; (2)仔细分析实验代码,至少需要结合以下两部分资料: A. ARMSKY-LPC213X_214X教学实验开发板原理图.pdf(在配套光盘的“用户使用手册”文件夹中); B. LPC213x User Manual.pdf或LPC214x User Manual.pdf(在配套光盘的“用户使用手册”文件夹中); LPC213X/214X的每个内部功能器件都和一组特定的寄存器相关,要想完成该功能器件所能实现的功能,就必须对这些相关的寄存器进行设置,这些寄存器的详细说明,用户可以在LPC213x User Manual.pdf或LPC214x User Manual.pdf中查看。 (3)自己将实验代码重新写一遍(一个字一个字的敲入计算机,请一定不要复制我们提供的现成代码),然后在ADS1.2下进行调试; (4)看看是否可以用另外的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 实现实验所要达到的效果,如果可以,可自己编写代码进行调试。 经过以上四步的练习,相信初学者可以很好的掌握LPC213X/214X片内功能器件的使用,对ARM开发流程也有了比较深刻的体会。 6.学ARM必搞嵌入式操作系统? 很多ARM初学者有一个错误的概念——学ARM必搞嵌入式操作系统。认为在ARM上跑嵌入式操作系统就代表技术先进、产品档次高的观点绝对是谬论。持这种观点的人一定是没有做过具体的产品开发。一个嵌入式产品是否需要跑嵌入式操作系统,是由很多因素决定的,例如,产品的功能需求、开发成本、开发周期等都是需要综合考虑的。 对于ARM初学者来说,前期我们并不建议使用嵌入式操作系统。当用户把所有配套实验都熟练掌握后,即对LPC213X/214X的内部功能器件可以做到熟练应用的程度后,可以考虑学习一个具体的嵌入式操作系统。 目前,流行的嵌入式操作系统非常多,例如,uC/OS-II、WinCe、Linux、VxWorks等。对于初学者,我们慎重地推荐源码公开的uC/OS-II嵌入式操作系统。uC/OS-II已经有很多产品成功使用的案例且得到了美国航空管理局的认证,北京航空航天大学出版社也出版了配套的专著。国内熟悉这个嵌入式操作系统的开发人员特别多,十分容易通过网站上的讨论社区得到帮助,更关键的是,初学者可以很容易地通过阅读源码达到彻底掌握嵌入式操作系统的目的。在熟练掌握了uC/OS-II后,用户已经从ARM初学者进入到了ARM应用开发工程师的行列。下一步可根据自己的知识背景、兴趣爱好和开发领域,再选择一个嵌入式操作系统(例如WinCE、Linux或VxWorks等)进行学习,彻底掌握ARM嵌入式系统开发。 7.如何检验学习成果 在经过一段时间的学习后,初学者一定想知道自己达到了一个怎样的程度,我们给初学者提供一个检查自己学习效果的方法:可以仿照我们的开发板,自己做一款类似的开发板出来。当然,没有必要完全按照我们的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ,您可以在自己设计的开发板中加入更多的功能,配套更多的实验。 8.充分利用网络资源,不耻下问! 我们已经进入了信息大爆炸的时代,很多知识都可以通过网络及时地获得。在学习的过程中遇到困难时,可以通过网络获得帮助,只要我们虚心好学,不耻下问(当然要注意在网络上寻求别人帮助的方式方法),一定会得到很多好心人的帮助,使自己每天都有所提高。 9.知识是永远学不完的——学海无涯、人生苦短 学习ARM嵌入式开发,尤其对于初学者而言,不应该过早地、过多地将精力用在嵌入式系统移植、Linux内核的研究和学习上,这些诱人的“热点”很容易使初学者迷失方向,进而忽视对基础知识的深入学习,到头来说得头头是道,可真的干起来却离实际的需求差得太远。知识是永远也学不完的——学海无涯、人生苦短!我们学习的目的是为了满足应用的需求。只要方法得当,掌握ARM嵌入式开发应用技术其实并不难。 这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。 第一,学习基本的裸机编程。 对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了 学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,noRFlash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗? 诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。 不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。 对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。 第二,使用linux系统进行一些基本的实验。    在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。     在这方面我们深蓝科技目前没有 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。 第三,研究完整的linux系统的的运行过程。 所谓完整的linux系统包括哪些部分呢? 三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。 那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。 第四,开始做系统移植。 上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。 当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。 在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。 至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己 经验 班主任工作经验交流宣传工作经验交流材料优秀班主任经验交流小学课改经验典型材料房地产总经理管理经验 的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。 这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的源代码包,然后进行修改,最终运行在板子上。 盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。 第五,研究linux驱动程序的编写。 移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。 Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。 这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。 第六,研究应用程序的编写。 做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。 完成这一步你基本就学完了嵌入式linux的全部内容了。 还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。   1、学习linux根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。        可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以 前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后猜蛄嗣 虏俚摹肚度胧较低场芬彩欠治鰈inux内核代码的,主要讲arm相关的。     看内核期间是个 非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第 二遍是几乎没有摸到门道,我分析有三个方面的原因:1、自己的基础差,这是最关键的。2、内核本身很难。3、没有交流和高人指点。到了第三遍时我才摸到 门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。     学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!      在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linux系统编程开发——〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是如果你懂了这些东西学习更有效率。       关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果 你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别 的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。     怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。 阅读这个文档的人应当首先阅读ADS1.2的帮助文档及相关内容。这个文档不会对编译器及连接器做出具体的说明,在 需要的时候会指出具体内容在相关资料的章节。同时阅读这个文档的人需要了解ARM指令集和一些ARM汇编的基本内容以及C和C 的相关编程内容。同时还需要了解ARM的流水线结构及一些基本的编程知识。同时为了方便查阅英文文档,所有的相关术语都使用英文原文 字串4 第一章 STARTUP 1 ARM的启动 一般的嵌入式 系统在主程序执行之前都需要执行一些初始化的过程以创造嵌入式程序运行的环境,尤其是一些高级的嵌入式系统,由于核心芯片使用内存映射、内存保护等机制以 及编程使用高级语言C,C 甚至JAVA语言,都需要先创建一个适合程序运行的硬件环境,然后初始化或者配置或者剪裁run-time library, 这些工作都必须在主程序运行前完成,所以一个startup程序或者程序组对于一个嵌入式系统来说是非常重要的。要编写startup程序,需要对编译 器、链接器和汇编器的细节有一定的了解,同时对ARM芯片硬件本身的地址分配以及memory mapping机制也需要有一些了解。 2 .ARM 程序的工作过程 首先由各种source file经过编译产生object文件,然后object文件经过链接生成Image文件,然后通过ICE的方法,根据描述文件的指定下载到目标板上的固 态存储器指定地址当中,比如flash,EEPROM, ROM等等。在程序执行之前,根据某些描述文件,将需要读写数据的部分读出放入动态存储器比如RAM当中,然后程序从ROM开始执行。或者有时为了提高程 序的运行速度,也可以将所有的程序(有一些root的部分除外,以后会提及)通过一个描述文件放入指定的RAM当中,然后程序从RAM开始执行,但是这样 会耗费大量的动态存储器,所以大部分程序会取折中的方法,将需要快速运行的部分和要读写的部分放入RAM中(一般读固态存储器的过程和动态存储器的过程是 一样的,但是写就不同了,所以读写的部分一定要放到RAM中),而只读的部分和对速度要求不是那么高的部分放入固态存储器。同时ARM结构的异常向量表规 定放在地址为0x00000000开始的地址空间上,而一般的CPU为了提高异常相应速度,会将这个向量段remap到其他的RAM当中,所以在描述文件 当中必须精确指定异常向量跳转程序的地址到remap的地方。在application程序执行前,还需要由一些文件描述application程序执行 的环境。比如系统工作时钟,总线频率。现在一般嵌入式编程语言为C,C 等。假如在使用它们的时候使用的runtime-library,那么在程序执行前还需要为这些库函数初始化heap。然后ARM可能工作在不同的模式, 还需要为不同的工作模式设置stack。这样,描述链接地址的文件,以及在application运行前所有的初始化程序就是startup程序组 字串5 3. STARTUP分类 这样,将startup程序所完成的功能分类。一类是链接地址描述,一类是各种初始化的程序。根据不同的应用,描述文件和初始化程序的内容以及结构和复杂程度都会不同。但是基本上,它们都必须实现以下功能。 3.1 描述文件实现功能 描述文件可以是链接命令行上简单的几个字符,也可以是一个非常复杂的文件,但是它必须完成如下功能: ; 指定程序下载的地址 ; 指定程序执行的地址 3.2 初始化程序实现的功能 初始化程序根据不同的应用,其结构和复杂度也不同,但是它必须完成如下基本功能: ; 异常向量初始化 ; 其他硬件环境初始化 ; 内存环境初始化 ADS是 ARM 公司推出的新一代 ARM 集成开发工具。现在 ADS 的最新版本是 1.2 ,全称为 ARM Developer Suite 。它除了可以安装在 Windows NT4 ,Windows 2000 , Windows 98 和 Windows 95 ,Windows XP 和 Windows Me 操作系统。        ADS 由命令行开发工具, ARM 时实库, GUI 开发环境 (Code Warrior 和 AXD) ,实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。 下面就具体介绍一下 ADS 的各个组成部分。 命令行开发工具 这些工具完成将源代码编译,链接成可执行代码的功能。 ADS 提供下面的命令行开发工具: armcc 是 ARM C 编译器。这个编译器通过了 Plum Hall C Validation Suite 为 ANSI C 的一致性测试。 armcc 用于将用 ANSI C 编写的程序编译成 32 位 ARM 指令代码。 因为 armcc 是我们最常用的编译器,所以对此作一个具体的介绍。 在命令控制台环境下,输入命令: armcc – help 可以查看 armcc 的语法格式以及最常用的一些操作选项 armcc 最基本的用法为: armcc [options] file1 file2 ... filen 这里的 option 是编译器所需要的选项, fiel1,file2…filen 是相关的文件名。 这里简单介绍一些最常用的操作选项。 -c :表示只进行编译不链接文件; -C : ( 注重:这是大写的 C) 禁止预编译器将注释行移走; -D :定义预处理宏,相当于在源程序开头使用了宏定义语句 #define symbol ,这里 symbol 默认为 1 ; -E :仅仅是对 C 源代码进行预处理就停止; -g :指定是否在生成的目标文件中包含调试信息表; -I :将 directory 所指的路径添加到 #include 的搜索路径列表中去; -J :用directory 所指的路径代替默认的对 #include 的搜索路径; -o :指定编译器最终生成的输出文件名。 -O0 :不优化; -O1 :这是控制代码优化的编译选项,大写字母 O 后面跟的数字不同,表示的优化级别就不同, -O1 关闭了影响调试结果的优化功能; -O2 :该优化级别提供了最大的优化功能; -S :对源程序进行预处理和编译,自动生成汇编文件而不是目标文件; -U :取消预处理宏名,相当于在源文件开头,使用语句 #undef symbol; -W :关闭所有的或被选择的警告信息; 有关更具体的选项说明,读者可查看 ADS 软件的在线帮助文件。 armcpp armcpp 是 ARM C 编译器。它将 ISO C 或 EC 编译成 32 位 ARM 指令代码。 tcc tcc 是 Thumb C 编译器。该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性的测试。 tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。 tcpp tcpp 是 Thumb C 编译器。 它将 ISO C 和 EC 源码编译成 16 位 Thumb 指令代码。 armasm armasm 是 ARM 和 Thumb 的汇编器 . 它对用 ARM 汇编语言和 Thumb 汇编语言写的源代码进行汇编。 armlink 是 ARM 连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。 ARM 链接器生成的是 ELF 格式的可执行映像文件。 armsd armsd 是 ARM 和 Thumb 的符号调试器。它能够进行源码级的程序调试。用户可以在用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。 GUI 开发环境 (Code Warrior 和 AXD) CodeWarrior 集成开发环境 CodeWarrior for ARM 是一套完整的集成开发工具,充分发挥了 ARM RISC 的优势 , 使产品开发人员能够很好的应用尖端的片上系统技术 . 该工具是专为基于 ARM RISC 的处理器而设计的 , 它可加速并简化嵌入式开发过程中的每一个环节,使得开发人员只需通过一个集成软件开发环境就能研制出 ARM 产品,在整个开发周期中 , 开发人员无需离开 CodeWarrior 开发环境 , 因此节省了在操做工具上花的时间 , 使得开发人员有更多的精力投入到代码编写上来, CodeWarrior 集成开发环境 (IDE) 为治理和开发项目提供了简单多样化的图形用户界面。用户可以使用 ADS 的 CodeWarrior IDE 为 ARM 和 Thumb 处理器开发用 C , C ,或 ARM 汇编语言的程序代码。通过提供下面的功能, CodeWarrior IDE 缩短了用户开发项目代码的周期。 1. 全面的项目治理功能; 2. 子函数的代码导航功能,使得用户迅速找到程序中的子函数。 可以在 CodeWarrior IDE 为 ARM 配置在 8.1.1 中介绍的各种命令工具,实现对工程代码的编译, 汇编和链接。 在 CodeWarrior IDE 中所涉及到的 target 有两种不同的语义。 目标系统 (Target system) 是特指代码要运行的环境,是基于 ARM 的硬件。比如,要为 ARM 开发板上编写要运行在它上面的程序,这个开发板就是目标系统。 生成目标 (Build target) 是指用于生成特定的目标文件的选项设置 ( 包括汇编选项,编译选项,链接选项以及链接后的处理选项 ) 和所用的文件的集合。 CodeWarrior IDE 能够让用户将源代码文件,库文件还有其他相关的文件以及配置设置等放在一个工程中。每个工程可以创建和治理生成目标设置的多个配置。例如,要编译一个包含调试信息的生成目标和一个基于 ARM7TDMI 的硬件优化生成目标,生成目标可以在同一个工程中共享文件,同时使用各自的设置。 CodeWarrior IDE 为用户提供下面的功能: 源代码编辑器,它集成在 CodeWarrior IDE 的浏览器中,能够根据语法格式,使用不同的颜色显示代码; 源代码浏览器,它保存了在源码中定义的所有符号,能够使用户在源码中快速方便的跳转;查找和替换功能,用户可以在多个文件中,利用字符串通配符,进行字符串的搜索和替换; 文件比较功能,可以使用户比较路径中的不同文本文件的内容。 ADS 的 CodeWarrior IDE 是基于 Metrowerks CodeWarrior IDE 4.2 版本的。它经过适当的裁剪以支持 ADS 工具链。 针对 ARM 的配置面板为用户提供了在 CodeWarrior IDE 集成环境下配置各种 ARM 开发工具的能力,这样用户可以不用在命令控制台下就能够使用在 8.1.1 和将在 8.1.4 中介绍的各种命令。 以 ARM 为目标平台的工程创建向导,可以使用户以此为基础,快速创建 ARM 和 Thumb 工程。 尽管大多数的 ARM 工具链已经集成在 CodeWarrior IDE ,但是仍有许多功能在该集成环境中没有实现,这些功能大多数是和调试相关的,因为 ARM 的调试器没有集成到 CodeWarrior IDE 中。 由于 ARM 调试器 (AXD) 没有集成在 CodeWarrior IDE 中,这就意味着,用户不能在 CodeWarrior IDE 中进行断点调试和查看变量。 对于熟悉 CodeWarrior IDE 的用户会发现,有许多的功能已经从 CodeWarrior IDE For ARM 中移走,比如快速应用程序开发模板等。 在 CodeWarrior IDE For ARM 中有很多的菜单或子菜单是不能使用的。下面介绍一下这些不能使用的选项。 1. View 菜单下不能使用的菜单选项有: Processes , Expressions , Global Variable , Breakpoints , Registers 。 2. Project 菜单不能使用的菜单选项: Precompile 子菜单。因为 ARM 编译器不支持预编译的头文件。 3. Debug 菜单 该菜单中没有一个子菜单是可以使用的。 4. Browser 菜单中不能使用的菜单选项: New Property , New Method 和 New Event Set 。 5. Help menu 中不能用于 ADS 的菜单选项有: CodeWarrior Help , Index , Search 和 Online Manuals 。 有关 CodeWarrior IDE 中一些常用菜单的使用,将在后面的举例中具体说明的,在此,不在赘述。 8.1.3.2 ADS 调试器 调试器本身是一个软件,用户通过这个软件使用 debug agent 可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。 ADS 中包含有 3 个调试器: AXD(ARM eXtended Debugger) : ARM 扩展调试器; armsd(ARM Symbolic Debugger) : ARM 符号调试器; 与老版本兼容的 Windows 或 Unix 下的 ARM 调试工具,ADW/ADU(Application Debugger Windows/Unix) 。 下面对在调试映像文件中所涉及到的一些术语做一个简单的介绍。 Debug target 在软件开发的最初阶段,可能还没有具体的硬件设备。假如要测试所开发的软件是否达到了预期的效果,这可以由软件仿真来完成。即使调试器和要测试的软件运行在同一台 PC 上,也可以把目标当作一个独立的硬件来看待。 当然,也可以搭建一个 PCB 板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用软件。 只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。 调试器能够发送以下指令: 1. 装载映像文件到目标内存; 2. 启动或停止程序的执行; 3. 显示内存,寄存器或变量的值; 4. 答应用户改变存储的变量值。 Debug agent Debug agent 执行调试器发出的命令动作,比如:设置断点,从存储器中读数据,把数据写到存储器等。 Debug agent 既不是被调试的程序,也不是调试器。在 ARM 体系中,它有这几种方式: Multi-ICE(Multi-processor in-circuit emulator) , ARMulator 和 Angel 。其中 Multi-ICE 是一个独立的产品,是 ARM 公司自己的 JTAG 在线仿真器,不是由 ADS 提供的。 AXD 可以在 Windows 和 UNIX 下,进行程序的调试。它为用 C , C ,和汇编语言编写的源代码提供了一个全面的 Windows 和 UNIX 环境。 8.1.4 实用程序 ADS 提供以下的实用工具来配合前面介绍的命令行开发工具的使用 fromELF 这是 ARM 映像文件转换工具。该命令将 ELF 格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括 plain binary(BIN 格式映像文件 ), Motorola 32-bit S-record format(Motorola 32位 S 格式映像文件 ), Intel Hex 32 format(Intel 32 位格式映像文件 ) ,和 Verilog-like hex format(Verilog 16 进制文件 ) 。 FromELF 命令也能够为输入映像文件产生文本信息,例如代码和数据长度。 armar ARM 库函数生成器将一系列 ELF 格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个链接器以代替几个 ELF 文件。 Flash downloader 用于把二进制映像文件下载到 ARM 开发板上的 Flash 存储器的工具 8.1.5 支持的软件 ADS 为用户提供下面的软件,使用户可以在软件仿真的环境下或者在基于 ARM 的硬件环境调试用户应用程序。 Mulator 仿真模拟器 Mulator是一个 ARM 指令集仿真器,集成在 ARM 的调试器 AXD 中,它提供对 ARM 处理器的指令集的仿真,为 ARM 和 Thumb 提供精确的模拟。用户可以在硬件尚未做好的情况下,开发ARM程序代码。投入硬件设备少,风险低!
本文档为【ARM初学者】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_300462
暂无简介~
格式:doc
大小:69KB
软件:Word
页数:14
分类:互联网
上传时间:2010-10-14
浏览量:29