犹记得当年读书的时候,老师说单片机、ARM、DSP有互通之处,都是CPU,但听老师讲都听不懂。

  我该如何理解他们,并找出他们的异同呢?我们来看看行内人的看法:

  ICer,从事ARM CPU的SOC设计

  按我的理解说几句吧,希望能说薄一点。

  首先,说CPU,中央处理器,本质就是一个集成电路,实现的功能就是从一个地方(如rom)读出一个指令,从一个地方(如ram)读出数据,然后根据指令的不同对数据做不同的处理(如相加),然后把结果存回某个地方(如ram)。不同架构的cpu会有不同的指令,不同的存取方式,不同的速度,不同的效率,等等的差异。

  然后,说单片机(通常意义所说的微控制器MCU),ARM(通常意义所说的高效能RISC),DSP(通常意义所说的通用数字信号处理器),这三个CPU分别是针对不同的应用而产生的CPU。当然这也不是绝对的,因为ARM现在出的CPU囊括了MCU(如M0),RISC(如A8),DSP(如M4)。

  微控制器的目的主要是用作控制,他不需要多快的速度,如电饭锅的控制器,只需要控制发热元件的通断,信号等的开关等,但是对成本要求很严格,所以一般做得比较简单,4位,8位的很多。

  高效能的RISC,常用于一些数据处理比较多的地方,最常见的莫过于现在的消费性电子产品了,手机,pad,MP4等等,目前ARM的商业模式主要是卖内核,集成到各家的SOC中间。他其实就是个通用的CPU,能干各种各样的活,和Intel的CPU一样。但是通用就有效能问题,在某些特殊场合,效能就显得没那么高了,如大量运算(譬如做FFT)的时候。这样就有DSP的用武之地了。

  DSP,数字信号处理器,只要是做数字信号处理的模块都可以叫做一个DSP,如视频解码的IP核。但你老师所说的应该是指通用的数字信号处理器,如Ti的TMS320C55x DSP。该CPU的长处就是在于运算,大量循环的计算,如连续1024个乘加。他的指令针对这种应用有特殊的处理,相比RISC可以更快速高效地完成这类运算。

  总的来说,学习CPU,首先就是要了解其指令集,然后了解去指令执行的方式,然后针对具体的芯片了解其外围电路,程序都是用C写的,基本使用就没啥问题了。

  入门教材就不知道了,学好微机原理先吧。

  qccc

  一种设备能称之为CPU,是因为它能够融入到计算机的冯诺依曼体系中。冯诺依曼的计算机模型规定了计算机“运算器、存储器、控制器、外存储器、输入和输出设备”,而CPU的重要地位在于解决了运算问题,计算机的CPU能够访问存储器的数据和指令进行运算,从实现运算这一点的角度上看,无论是单片机、ARM、DSP都可以称之为CPU。

  单片机集成完整的冯诺依曼体系所规定的结构,是一个完整的计算机体系。实现特定的运算功能,应用领域集中在工业自动化控制等专门化需求的运算领域。

  ARM出品的芯片精髓在“R”,是RISC精简指令集的意思,和传统大型机以及PC微处理器采用的指令系统相比,RISC指令集根据80%的时候只用到了20%的处理器指令的状况,使用了经过精简设计的指令系统,使得整个处理器的设计可以更加简洁,功耗、体积大大缩小,所以ARM在目前的手机、平板等职能移动设备上得到了广泛应用。随着ARM处理能力的不断增强,加上其功耗小的特点,也不断在扩展其企业级服务器集群应用的可能性,为企业降低能耗成本。

  DSP是数字信号处理器,相较于普通计算机实现通用计算的特点,DSP只负责数字信号(视频、音频或者其他传感器获得数字信号)处理。在日常生活中,常见的DVD、蓝光播放机、数字电视机顶盒、MP3、MP4等都广泛使用了DSP,由于设计的专门化,所以可以在较低的成本下,使DSP执行异常复杂的编码、解码等信号处理工作,而无需使用价格昂贵的通用处理器。

  所以从广义上讲,单片机、ARM和DSP都可以算做CPU,但是这种说法并不严格,因为如今CPU往往指代的是兼容x86架构的通用处理器,例如你电脑里的intel和amd出品的cpu。如果把单片机、ARM和DSP都称作CPU,会在理解上产生偏差。

  谢文洋,嵌入式爱好者

  这些的确都能算CPU,前面大家已经说过共同点了,我主要说说区别吧。主要区别在于用途不同造成了功能侧重的区别。

  比如单片机和低端ARM(如M3),更严谨的说法应该称作Microcontroller 或 MCU(Micro Control Unit),中文一般叫“微控制器”。而CPU叫做“中央处理器”。一个Control 和 Process 还是有很大区别的。 微控制器不需要一般也不具备强大的计算能力,重点在于实现各种逻辑和非逻辑控制。

  而DSP的(Digital Signal Processor), PROCESS表明它相比于通用单片机具有更为强大的处理,运算能力。可以实现对数字信号的各种算法的处理。

  举一个简单的例子。一个MP3可能由一块普通MCU+一块专用DSP 芯片组成。 其中普通MCU叫主控芯片,负责全局控制。诸如通过处理按键来响应用户的操作,控制屏幕输出相关播放信息给用户等等。而DSP只负责音频文件的解码。可见,全局的控制工作,逻辑比较繁琐,比如显示中各级菜单的实现,这是MCU适合的工作。而音频解码需要强大的运算能力,普通MCU难以胜任,就需要DSP来进行。

  而ARM和单片机,我个人认为没有特别严格意义的界限,主要看功能和需求的划分。ARM本身已经给我们划分的很好了:”ARMv7架构定义了三大分工明确的系列:‘A’系列面向尖端的基于虚拟内存的操作系统和用户应用;‘R’系列针对实时系统;‘M’系列对微控制器。“ 所以诸如STM32之类的Cortex-M3芯片其实也可以理解做高端单片机的范畴。侧重于控制,片内集成,低功耗等指标。相比传统51,AVR。 Contrex-M系列的微控制器集成了更多的资源(如更高位的AD,更多的串口,以及I2C,SPI之类的外设总线)。而且32位相比传统8位和16位的单片机也更有优势。

  而消费类电子产品中的ARM显然需要更为强大的运算功能。 这一块我不太熟悉,就不多说了。

  额,发现楼主还问了如何学习。其实很简单,就是实践。买一块开发板实际动手做比什么都强,有机会参与一些项目更好,自学现在网络资源也非常丰富,不用担心。可以从8位单片机学起,作为入门。虽然近些年大家都说51落伍了,但是作为单片机入门还是很好的,相对简单,网上资源到处都是。你去买任何一个模块几乎都会给你提供51的例程。。。我现在就经常拿51测试模块,测试好了再改一下代码用到stm32上。

  总之,只看书是没有用的。还是要多动手。写写代码,烧烧程序,焊焊简单的电路。你会收获很多。

  anning865

  我也来说一下自己的理解。

  首先,“嵌入式”这是个概念,准确的定义没有,各个书上都有各自的定义。但是主要思想是一样的,就是相比较PC机这种通用系统来说,嵌入式系统是个专用系统,结构精简,在硬件和软件上都只保留需要的部分,而将不需要的部分裁去。所以嵌入式系统一般都具有便携、低功耗、性能单一等特性。

  然后,MCU、DSP、FPGA这些都属于嵌入式系统的范畴,是为了实现某一目的而使用的工具。

  MCU经过这么多年的发展,早已不单单只有普林斯顿结构的51了,性能也已得到了很大的提升。因为MCU必须顺序执行程序,所以适于做控制,较多地应用于工业。而ARM本是一家专门设计MCU的公司,由于技术先进加上策略得当,这两年独霸单片机市场。ARM的单片机有很多种类,从低端M0(小家电)到高端A8、A9(手机、平板电脑)都很吃香,所以也不是ARM的单片机一定要上系统,关键看应用场合。

  DSP叫做数字信号处理器,它的结构与MCU不同,加快了运算速度,突出了运算能力。可以把它看成一个超级快的MCU。低端的DSP,如C2000系列,主要是用在电机控制上,不过TI公司好像称其为DSC(数字信号控制器)一个介于MCU和DSP之间的东西。高端的DSP,如C5000/C6000系列,一般都是做视频图像处理和通信设备这些需要大量运算的地方。

  FPGA叫做现场可编程逻辑阵列,本身没有什么功能,就像一张白纸,想要它有什么功能完全靠编程人员设计。如果你够NB,你可以把它变成MCU,也可以变成DSP。由于MCU和DSP的内部结构都是设计好的,所以只能通过软件编程来进行顺序处理,而FPGA则可以并行处理和顺序处理,所以比较而言速度最快。

  那么为什么MCU、DSP和FPGA会同时存在呢?那是因为MCU、DSP的内部结构都是由IC设计人员精心设计的,在完成相同功能时功耗和价钱都比FPGA要低的多。而且FPGA的开发本身就比较复杂,完成相同功能耗费的人力财力也要多。所以三者之间各有各的长处,各有各的用武之地。但是目前三者之间已经有融合的态势,ARM的M4系列里多加了一个精简的DSP核,TI的达芬奇系列本身就是ARM+DSP结构,ALTERA和XINLIX新推出的FPGA都包含了ARM的核在里面。所以三者之间的关系是越来越像三基色的三个圆了。

  一句话以蔽之“你中有我,我中有你”。

浅谈单片机、ARM和DSP的异同的更多相关文章

  1. 浅谈单片机中C语言与汇编语言的转换

    做了一单片机设计,要用C语言与汇编语言同时实现,现将这次设计的感受和收获,还有遇到的问题写下,欢迎感兴趣的朋友交流想法,提出建议. 单片机设计:基于51单片机的99码表设计 软件环境:Proteus8 ...

  2. 浅谈AsyncState与AsyncDelegate使用的异同

    对于AsyncState来说,其MSDN的解释为:得到BeginInvoke方法的最后一个参数.而对于AsyncDelegate来说,其MSDN的解释为:得到异步调用的委托对象.也就是异步调用的委托源 ...

  3. 浅谈Java中接口与抽象类的异同

    浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...

  4. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(二)

    我们在 浅谈Linux PCI设备驱动(一)中(以下简称 浅谈(一) )介绍了PCI的配置寄存器组,而Linux PCI初始化就是使用了这些寄存器来进行的.后面我们会举个例子来说明Linux PCI设 ...

  5. 浅谈Samsung Exynos4412处理器

    转载于:http://www.cnblogs.com/android210/archive/2013/01/16/2862349.html Topic:浅谈Samsung Exynos4412处理器( ...

  6. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  7. 浅谈JS面向对象

    浅谈JS面向对象 一 .什么是面向过程 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.注重代码的过程部分. 二.什么是面向对象 最先出现在管理学 ...

  8. 浅谈压缩感知(二十):OMP与压缩感知

    主要内容: OMP在稀疏分解与压缩感知中的异同 压缩感知通过OMP重构信号的唯一性 一.OMP在稀疏分解与压缩感知中的异同 .稀疏分解要解决的问题是在冗余字典(超完备字典)A中选出k列,用这k列的线性 ...

  9. 浅谈FPGA

    浅谈FPGA 前言 生活中永远都不会缺少「 为什么 」,于最近就被合胜学长了,问了一个看似简单却又极具意义的问题,为什么需要FPGA?FPGA与单片机的区别是什么?瞬间刷新了我入门三天FPGA的冲击感 ...

随机推荐

  1. mysql优化整理(索引)

    什么是索引? 索引是表记录的单个或多个字段重新组织的一种方法,其目的是提高数据库的查询速度,本质上就是一种数据结构. 索引的类型:primary(主键).secondary(其他) 索引的数据结构 I ...

  2. linux mysql默认安装在哪个目录

    MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件.配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比 ...

  3. CentOS 设置mysql的远程访问

    好记性不如烂笔头,记录一下. 安装了MySQL默认是拒绝远程连接的. 首先进入数据库,使用系统数据库mysql. mysql -u root -p mysql #回车,然后输入则使用了系统数据库 接着 ...

  4. 在Spring中使用异步事件实现同步事务

    结合Scala+Spring,我们将采取一个很简单的场景:下订单,然后发送一封电子邮件. 编制一个服务: @Serviceclass OrderService @Autowired() (orderD ...

  5. AIR加载PDF

    //系统需要先安装上Adobe Reader import flash.html.HTMLLoader; import flash.html.HTMLPDFCapability; import fla ...

  6. [React Testing] Setting up dependencies && Running tests

    To write tests for our React code, we need to first install some libraries for running tests and wri ...

  7. Linux以KB显示内存大小

    Linux以KB显示内存大小 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -k total used free shared buffers ca ...

  8. 常用分组函数count-avg-sum-max-min

    分组函数也称多行函数,用于对一组数据进行运算,针对一组数据(取自于多行记录的相同字段)只返回一个结果,例如计算公司全体员工的工资总和.最高工资.最低工资.各部门的员工平均工资(按部门分组)等.由于分组 ...

  9. 关于Lambda表达式的理解

    在.NET 1.0的时候,大家都知道我们经常用到的是委托.有了委托呢,我们就可以像传递变量一样的传递方法.在一定程序上来讲,委托是一种强类型的托管的方法指 针,曾经也一时被我们用的那叫一个广泛呀,但是 ...

  10. chkconfig(check config)命令

    功能说明:chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接.  语 法:chkconfig ...