因此,在对微处理器进行汇编编程时,我经常会看到书籍/教程和参考资料……然后,我看到一些人将其称为微控制器。
例如Atmel ATtiny2313 ....我看到了一些教程,有人称它为微处理器,有人称其为微控制器?
哪有 并且对它们进行编程(基本上)是否相同?(在组装中)
因此,在对微处理器进行汇编编程时,我经常会看到书籍/教程和参考资料……然后,我看到一些人将其称为微控制器。
例如Atmel ATtiny2313 ....我看到了一些教程,有人称它为微处理器,有人称其为微控制器?
哪有 并且对它们进行编程(基本上)是否相同?(在组装中)
Answers:
这实际上是两个问题合二为一...
首先,微控制器和微处理器之间有什么区别?
微处理器纯粹是遵循从外部存储器总线读取的一组指令的CPU。它通过外部通讯总线控制外围设备(例如屏幕,键盘,鼠标,硬盘驱动器等)。对微处理器编程时,程序在设备外部。在计算机中,该内存最初是启动BIOS ROM,它最初将操作系统从硬盘驱动器读取到RAM内存中,然后从那里继续执行它。
微控制器有点像一个多合一的CPU +内存,带有一些用于与外界通信的外部端口。它是自包含的,并且不使用外部存储器来保存其程序(尽管如果需要,它可以读取工作数据并将其写入外部存储器)。
其次,对微控制器和微处理器进行编程是否相同?
在某些方面是,在某些方面不是。
汇编语言是一个广义术语,它描述CPU可以直接理解的一组指令。当您“编译”汇编语言时,它实际上并没有编译任何东西,它所做的只是将其转换为代表命令的字节序列,并插入一些相对的内存位置。这对于微处理器和微控制器都是常见的。
但是,不同类型的CPU了解不同的CPU指令集。例如,如果您编写与pic 16F877微控制器一起使用的汇编语言程序,则对于微处理器或16Fxxx pic微控制器系列之外的任何其他微控制器而言,它将完全是废话。
因此,尽管在所有微处理器和微控制器上汇编的工作方式都相似,但是您编写的指令的实际列表却大不相同。要使用汇编语言编写代码,您需要对设备的体系结构有深入的了解,对于微控制器,通常可以从数据表中获得该知识。
不同之处在于,微控制器包括片上存储器,例如闪存EEPROM和RAM,以及外围设备,例如并行和串行I / O。最早的微处理器都是外部设备。代替I / O的微处理器,将地址和数据总线带到了它们的引脚。
您为两者编写代码的方式都是相同的。
为了说明这一点:有些架构(例如ARM)具有与微控制器(所有代码和数据存储器都在芯片上),微处理器(所有代码和数据存储器都在外部)或混合(某些)相同的CPU。芯片上的内存,但对于大多数应用,您将添加外部内存)。CPU是相同的,因此编程(就CPU指令而言)是相同的。
尽管这往往是一个灰色区域,但微控制器和微处理器之间的另一个共同区别是,微控制器通常使用哈佛架构(用于代码和数据的单独地址空间),而微处理器几乎都使用冯·诺依曼架构(用于代码和数据的组合地址空间) 。
使用哈佛架构的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没有硬件堆栈,因此可以利用其修改代码的能力来执行子例程返回。
微处理器通常用于计算机中,该计算机被构造为运行任意尚未确定目的的程序。这样的计算机通常将在其中包含一些供应商提供的代码,希望用户提供的代码可以与之交互。相比之下,微控制器通常用于仅用于运行单个程序的机器中。通常,为微控制器编写代码的人会提供机器将执行的每条指令。
一些微控制器使用与流行的微处理器相同的指令集。在个人计算机的原始Macintosh,Amiga和Atari ST系列中使用的68000指令集也已在某些微控制器中使用。尽管Macintosh和基于68HC340的控制板使用的指令集是相同的,但是,这两个平台的编程易于产生很大的差异。在Macintosh上,当用户提供的程序开始运行时,大部分系统将已经“设置”。需要一块内存的代码可以将所需的数量加载到寄存器中并执行“ A-trap”指令。然后,Macintosh OS将返回一个指针,该指针指向某些先前未分配用于其他用途的内存,并标记该内存区域,这样它就不会 直到指示原始收件人不再需要它为止,才重新分配它。相比之下,在具有68HC340和128K RAM的板上,没有或没有能力“询问” RAM。程序启动时,将“获取”它可以使用的128K值;没有别的东西会使用它,但是另一方面,用户程序必须跟踪它用于什么目的的区域,因为其他任何东西都不会跟踪它。
虽然此处的区别实际上是微型计算机与微控制器之间的区别,而问题是关于微处理器的,但是大多数微处理器编程讨论都在通用计算机的背景下进行讨论。