<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=463 </link><title>关于我对初学ARM的理解</title><author>秋水梦</author><pubDate>2009/12/17 15:48:53</pubDate><description><![CDATA[总是听人问&lsquo;初学ARM怎么学啊&rsquo;，&lsquo;我是该学ARM7还是ARM9啊&rsquo;等这样的语言。
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下仅仅写出本人的一点小小的体会，有不对的地方，还望大家见谅和理解，毕竟我也是初学者，呵呵！！！</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; <strong>从现代产品的使用量来讲：</strong></div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; ARM7占有的分量肯定要远远超过ARM9,ARM11等。就好像现在的单片机一样，用的肯定</div>
<div style="text-align: left; line-height: 19.2pt" align="left">不比ARM少吧，貌似51单片机用的还是很多的一样的道理。从这个角度来讲学习ARM7还是有必要的。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp; <strong>从难易程度来讲：</strong></div>
<div style="text-align: left; line-height: 19.2pt" align="left"><strong>&nbsp;&nbsp;</strong>&nbsp;我认为如果是裸机使用的话，难易程度是一样的，为什么这么说呢，ARM9比ARM7多了一个MMU，也就是内存管理单元</div>
<div style="text-align: left; line-height: 19.2pt" align="left">这样我们可以方便快速的对指令和数据CACHE进行管理，从而提高代码运行的速度和质量。但是如果仅仅是裸机运行，你可以不需要</div>
<div style="text-align: left; line-height: 19.2pt" align="left">管理内存，因为一般时候就根本不需要（貌似FAT系统的时候你可以用，这样对FAT文件系统的操作会快，我做的FAT16系统没用到）</div>
<div style="text-align: left; line-height: 19.2pt" align="left">。ARM9,ARM7有很多相同点，那三星的S3C44B0和S3C2440来说吧。你要引导系统，你需要启动代码（关于启动代码包含了什么这里先</div>
<div style="text-align: left; line-height: 19.2pt" align="left">不做论述），然后你要使用该CPU，你要熟悉该CPU的内部资源，你可能会从最原始的CPU时钟开始，进而学习IO口的操作等等，这里无非就是S3C2440</div>
<div style="text-align: left; line-height: 19.2pt" align="left">比S3C44B0多了LCD控制器，多了SD卡控制器（我记得44B0没有），多了IIS音频接口，多了摄像头接口等。所以说你如果从这两个芯片来选择的话，就看你</div>
<div style="text-align: left; line-height: 19.2pt" align="left">现在的产品需要什么资源来选择了。如果是自学的话，要学ARM7我建议先不选择S3C44B0，选择LPC的是个不错的选择（后面介绍原因)</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp; <strong>从可移植的操作系统来选择</strong></div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;&nbsp;&nbsp; </strong>ARM7由于没有MMU，所以只能移植诸如UCOSII、UCLINUX之类的操作系统，ARM9则可以移植现在流行的所有的操作系统，但是UCOSII、UCLINU占用的</div>
<div style="text-align: left; line-height: 19.2pt" align="left">系统资源相对较少，而且当你熟悉了UCOSII的系统以后，还可以移植到单片机上面，进而实现单片机的多任务操作。所以还要看你项目的需要了。个人学的话看</div>
<div style="text-align: left; line-height: 19.2pt" align="left">爱好了。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我建议如果个人学习的话，就从ARM7学习，虽然我是从ARM9学习（实际上没学下多少），但我现在觉得个人学习从ARM7学习不错。那么选用什么CPU比较合适呢</div>
<div style="text-align: left; line-height: 19.2pt" align="left">我觉得选择LPC系列的不错，比如LPC2103 LPC2220等等。无非资源的不同。那么为什么要选用这些呢？首先这个ARM7网上资源比较丰富，再次，我们都知道ARM系列处理器都需要启动代码的，而LPC的ARM7系列，很多产品固化了启动代码，可以方便的使用串口或者ISP下载，比较适合长久以来用单片机开发的工作人员。学起来比较顺手，</div>
<div style="text-align: left; line-height: 19.2pt" align="left">当然它的主频高达75MHZ，比普通单片机当然是快很多了。最主要的是现在很多产品还是用ARM7系列来做的。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;你也可以用ARM9来做，像很多人说的一样，用ARM9不用操作系统那是浪费了。但我们的产品不需要用系统，或者说不需要多任务同时处理怎么办。那你可以选择ARM7啊，有人可能会说ARM7没有摄像头接口，这里的摄像头接口是CAMMER接口，而不是USB摄像头，很多ARM7有USB接口，我们可以选择USB摄像头啊。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;既然如此，ARM9肯定也有不少的人来学习了。那么涉及的东西就比较多了。刚开始需要有东西来引导你的操作系统，这个东西叫做BOOTLOAD，很多人刚开始就像弄明白这个BOOTLOAD到底是如何作出来的，最后又是如何来引导操作系统的。我就做了这些工作。最后花费了不少时间。还有很多问题没弄明白呢。然后就是比如你要学习LINUX操作系统，这个时候肯定有人想知道内核是如何移植出来的，文件系统是如何制作出来的，这花费的时间我估计不会太少吧。有天分的几个月弄的比较熟悉的话，我觉得已经很厉害了。主要很多人也没这么多时间天天来做这个事情啊。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过上面的步骤以后，一个平台算是搭建起来了。下来就要编写驱动程序或者自己的应用程序了，这就涉及到了LINUX下的程序设计了，高级的有涉及到网络编程，QT图形界面等等。这都不是你说学就能一下子学会的。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面的工作确实有点多了，所以有很多人专门学习移植，有的人专门做驱动程序设计，有的人专门做QT图形界面，所以产生了很多分工。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;笔者最近做一个项目正好用到了ARM9 S3C2440，用的是裸机包含了摄像头，LCD，USB等一些的运用，目前还暂时处于无操作系统状态，并一边熟悉LINUX下编程呢。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">因为对我自己而言，移植浪费了不少的时间，主要是目前网络流行的移植文章所用的NOR FLASH NAND FLASH我和他们的都有所区别，所以一下子移植不成功。所以建议选用大多数人用的板子是完全可以的。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;综上所述，我认为如果你自己在家要自己学习，先从ARM7肯定不是什么错误，当然从ARM9学习也未尝不可啊。只要坚持就能学会的。</div>
<div style="text-align: left; line-height: 19.2pt" align="left">&nbsp;&nbsp;&nbsp;&nbsp;</div>]]></description></item></channel></rss>