微处理器和微处理器之间的编程差异?


9

因此,在对微处理器进行汇编编程时,我经常会看到书籍/教程和参考资料……然后,我看到一些人将其称为微控制器。

例如Atmel ATtiny2313 ....我看到了一些教程,有人称它为微处理器,有人称其为微控制器?

哪有 并且对它们进行编程(基本上)是否相同?(在组装中)



1
@Kellenjb:可能不是在询问编程差异。我认为这足够不同,无法关闭。
BG100 2011年

1
@ BG100接受的答案仅是真正解释了差异,而不是编程差异。
2011年

Answers:


14

这实际上是两个问题合二为一...

首先,微控制器和微处理器之间有什么区别?

微处理器纯粹是遵循从外部存储器总线读取的一组指令的CPU。它通过外部通讯总线控制外围设备(例如屏幕,键盘,鼠标,硬盘驱动器等)。对微处理器编程时,程序在设备外部。在计算机中,该内存最初是启动BIOS ROM,它最初将操作系统从硬盘驱动器读取到RAM内存中,然后从那里继续执行它。

微控制器有点像一个多合一的CPU +内存,带有一些用于与外界通信的外部端口。它是自包含的,并且不使用外部存储器来保存其程序(尽管如果需要,它可以读取工作数据并将其写入外部存储器)。

其次,对微控制器和微处理器进行编程是否相同?

在某些方面是,在某些方面不是。

汇编语言是一个广义术语,它描述CPU可以直接理解的一组指令。当您“编译”汇编语言时,它实际上并没有编译任何东西,它所做的只是将其转换为代表命令的字节序列,并插入一些相对的内存位置。这对于微处理器和微控制器都是常见的。

但是,不同类型的CPU了解不同的CPU指令集。例如,如果您编写与pic 16F877微控制器一起使用的汇编语言程序,则对于微处理器或16Fxxx pic微控制器系列之外的任何其他微控制器而言,它将完全是废话。

因此,尽管在所有微处理器和微控制器上汇编的工作方式都相似,但是您编写的指令的实际列表却大不相同。要使用汇编语言编写代码,您需要对设备的体系结构有深入的了解,对于微控制器,通常可以从数据表中获得该知识。


嗯,我的意思是说,每个ASM的ASM都会不同.....但是,MC和MP之间的命令/等通常是相同的(或相同的方式)...我的意思是MC拥有一个MP所以我假设是这样(减去内存)

@Sauron:不,不是真的。虽然某些命令在设备之间可能是相似的,例如add,mov,sub等,但它们的实现方式可能有所不同,并且不会在设备之间移植。
BG100 2011年

1
很好的答复,当我开始我的微处理器课时,可能对我有帮助。
pfyon 2011年

好吧,我的意思是……就像一个微控制器内部有一个CPU一样……汇编指令更针对实际的CPU,而不是它周围的组件。

@Sauron:是的,这是正确的。
BG100 2011年

10

不同之处在于,微控制器包括片上存储器,例如闪存EEPROM和RAM,以及外围设备,例如并行和串行I / O。最早的微处理器都是外部设备。代替I / O的微处理器,将地址和数据总线带到了它们的引脚。
您为两者编写代码的方式都是相同的。

为了说明这一点:有些架构(例如ARM)具有与微控制器(所有代码和数据存储器都在芯片上),微处理器(所有代码和数据存储器都在外部)或混合(某些)相同的CPU。芯片上的内存,但对于大多数应用,您将添加外部内存)。CPU是相同的,因此编程(就CPU指令而言)是相同的。


哦,这更有意义,但是每个ASM的ASM基本相同?

您的意思是,如果我学会为Cortex M系列编码,那么我也可以为Cortex A系列编码?
2011年

对于这两个问题基本上是肯定的,但是asm指令是相同的(尽管可能会有细微的变化,就像各种ARM版本可以添加特定的指令一样)。但是,每当您在CPU之外使用其他东西(缓存,中断控制器,外围设备等)时,都会有很大的不同。
Wouter van Ooijen 2011年

8

尽管这往往是一个灰色区域,但微控制器和微处理器之间的另一个共同区别是,微控制器通常使用哈佛架构(用于代码和数据的单独地址空间),而微处理器几乎都使用冯·诺依曼架构(用于代码和数据的组合地址空间) 。

使用哈佛架构的microntroller系列示例包括:AVR,Intel 8051,PIC(PIC32除外,请参见下文)和ARM Cortex-M3。一个明显的例外是飞思卡尔处理器,例如HCS08,它使用Von Neumann架构,视差螺旋桨也是如此。

这会以多种方式影响编程(下面的示例使用C):

RAM可能有几种类型,每种都有自己的地址空间。例如,8051的外部数据(xdata)与RAM的前256个字节分开寻址,即使它们都在同一芯片上实现也是如此。因此,必须在变量声明中使用限定符,例如unsigned int xdata foo;

如果在代码存储器中声明了常量,则可能需要先将其复制到RAM才能访问它们。或者,需要一种方法来像访问数据一样访问代码存储器,例如8051s的代码限定符或PIC的程序空间可视性(PSV)功能。

当将C代码从一个芯片家族移植到另一个芯片家族时,这些访问代码和RAM的非标准方式往往是主要的区别(外设除外)。

您不能在严格的哈佛体系结构中从RAM中执行代码,因此不能有任何自我修改的代码(除非您不计其数地快速刷新程序存储器)。但是,PIC32具有修改后的哈佛架构,该架构允许在RAM中执行代码。实际上,由于Parallax Propeller没有硬件堆栈,因此可以利用其修改代码的能力来执行子例程返回。


1

微控制器通常是提供计算和外围功能的单芯片解决方案。

微处理器提供计算功能,但不提供外围功能。

外围功能可以很简单,只要具有一些简单的I / O。或可能包括复杂的计数器和计时器,视频显示,以太网,电机控制,音频和视频编解码器等。

对于给定的体系结构(例如基于x86的CPU和MCU),“计算”编码将相同。但是,访问外围功能的方式会有所不同,因此,根据目标硬件上外围功能的实现方式,您将需要执行非常不同的硬件特定编码。


1

微处理器通常用于计算机中,该计算机被构造为运行任意尚未确定目的的程序。这样的计算机通常将在其中包含一些供应商提供的代码,希望用户提供的代码可以与之交互。相比之下,微控制器通常用于仅用于运行单个程序的机器中。通常,为微控制器编写代码的人会提供机器将执行的每条指令。

一些微控制器使用与流行的微处理器相同的指令集。在个人计算机的原始Macintosh,Amiga和Atari ST系列中使用的68000指令集也已在某些微控制器中使用。尽管Macintosh和基于68HC340的控制板使用的指令集是相同的,但是,这两个平台的编程易于产生很大的差异。在Macintosh上,当用户提供的程序开始运行时,大部分系统将已经“设置”。需要一块内存的代码可以将所需的数量加载到寄存器中并执行“ A-trap”指令。然后,Macintosh OS将返回一个指针,该指针指向某些先前未分配用于其他用途的内存,并标记该内存区域,这样它就不会 直到指示原始收件人不再需要它为止,才重新分配它。相比之下,在具有68HC340和128K RAM的板上,没有或没有能力“询问” RAM。程序启动时,将“获取”它可以使用的128K值;没有别的东西会使用它,但是另一方面,用户程序必须跟踪它用于什么目的的区域,因为其他任何东西都不会跟踪它。

虽然此处的区别实际上是微型计算机与微控制器之间的区别,而问题是关于微处理器的,但是大多数微处理器编程讨论都在通用计算机的背景下进行讨论。


0

微处理器:执行指令的数字硬件模块。该模块可以是完整的集成电路。

微控制器:一个完整​​的模块,除其他模块外,还包含带有内部存储器的微处理器。


迈克,欢迎来到EE.SE。使用<enter> x 2换段。我已经为您修复了。
晶体管
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.