¿Diferencias de programación entre un microcontrolador y un microprocesador?

9

Así que a menudo veo libros / tutoriales y referencias cuando programo en ensamblado a un microprocesador ... luego veo que algunos se refieren a él como un microcontrolador.

Por ejemplo, el Atmel ATtiny2313 ... vi algunos tutoriales, algunos lo llaman microprocesador, algunos lo llaman microcontrolador.

Cual es y es programarlos (básicamente) lo mismo? (en conjunto)


fuente
1
@Kellenjb: Sería si no estuviera preguntando sobre las diferencias de programación. Creo que esto es lo suficientemente diferente como para no cerrar.
BG100
1
@ BG100 la respuesta aceptada solo explica realmente la diferencia, no una diferencia de programación.
Kortuk

Respuestas:

14

Esto es realmente dos preguntas en una ...

En primer lugar, ¿cuál es la diferencia entre un microcontrolador y un microprocesador?

El microprocesador es puramente una CPU que sigue un conjunto de instrucciones leídas desde un bus de memoria externo. Controla periféricos externos (como pantalla, teclado, mouse, disco duro, etc.) a través de un bus de comunicaciones externo. Cuando programa un microprocesador, su programa es externo al dispositivo. En una computadora, esta memoria es inicialmente la ROM del BIOS de arranque que inicialmente lee el sistema operativo del disco duro en la memoria RAM, luego continúa ejecutándolo desde allí.

El microcontrolador es como una CPU + Memoria todo en uno, con algunos puertos externos para comunicarse con el mundo exterior. Es autónomo y no utiliza memoria externa para mantener su programa (aunque si es necesario, puede leer y escribir datos de trabajo en la memoria externa).

En segundo lugar, ¿es lo mismo programar un microcontrolador y un microprocesador?

De alguna manera sí, y de alguna manera no.

El lenguaje ensamblador es un término amplio que describe un conjunto de instrucciones que la CPU puede entender directamente. Cuando 'compila' el lenguaje ensamblador, en realidad no compila nada, solo lo convierte en una secuencia de bytes que representan los comandos y enchufes en algunas ubicaciones de memoria relativas. Esto es común tanto a los microprocesadores como a los microcontroladores.

Sin embargo, diferentes tipos de CPU entienden un conjunto diferente de instrucciones de CPU. Por ejemplo, si escribe un programa en lenguaje ensamblador que funciona con un microcontrolador pic 16F877, no tendrá ningún sentido para un microprocesador o cualquier otro microcontrolador fuera de la familia de microcontroladores pic 16Fxxx.

Entonces, aunque el ensamblaje funciona de manera similar en todos los microprocesadores y microcontroladores, la lista real de instrucciones que escribe son muy diferentes. Para escribir en lenguaje ensamblador, debe tener un conocimiento profundo de la arquitectura del dispositivo, que normalmente puede obtener de la hoja de datos en el caso de un microcontrolador.

BG100
fuente
Bueno, lo que quise decir es que sí ASM será diferente para cada uno ... pero los comandos / etc. generalmente son los mismos (o se hacen de la misma manera) entre un MC y un MP ... Quiero decir que un MC tiene un MP así que supongo que sí ... (menos la memoria)
@Sauron: No, en realidad no ... aunque algunos comandos pueden ser similares entre dispositivos, como add, mov, sub, etc., probablemente se implementen de manera diferente y no se transfieran entre dispositivos.
BG100
1
Excelente respuesta, y una que probablemente podría haberme ayudado cuando comenzaba mi clase de microprocesadores.
pfyon
bueno, lo que quise decir es ...... Como un microcontrolador tiene una CPU dentro ... las instrucciones de montaje están más dirigidas a la CPU real que a los componentes que la rodean.
@Sauron: Sí, eso es correcto.
BG100
10

La diferencia es que el microcontrolador incluye memoria en chip como Flash EEPROM y RAM, y periféricos como E / S en paralelo y en serie. Con los primeros microprocesadores, todos eran dispositivos externos. En lugar de los microprocesadores de E / S, la dirección y el bus de datos se llevaron a sus pines.
La forma en que escribe el código para ambos es la misma.

Para ilustrar ese punto: hay arquitecturas (ARM, por ejemplo) donde la misma CPU está disponible como microcontrolador (con todo el código y la memoria de datos en el chip), como microprocesador (todo el código y la memoria de datos externa), o como híbrido (algunos memoria en el chip, pero para la mayoría de las aplicaciones agregará memoria externa). La CPU es la misma, por lo que la programación (en el sentido de las instrucciones de la CPU) es la misma.

stevenvh
fuente
Oh ok, eso tiene más sentido, pero ¿el ASM para cada uno es básicamente el mismo?
¿Quiere decir que si aprendo a codificar para la serie Cortex M, también puedo codificar para la serie Cortex A?
0xakhil
Básicamente sí a ambas preguntas, las instrucciones asm son las mismas (aunque puede haber pequeñas variaciones, al igual que varias versiones ARM pueden agregar instrucciones específicas). Pero cada vez que use cosas fuera de la CPU (caché, controlador de interrupción, periféricos, etc.) habrá grandes diferencias.
Wouter van Ooijen
8

Aunque esto tiende a ser un área gris, otra diferencia común entre los microcontroladores y los microprocesadores es que los microcontroladores a menudo usan la arquitectura Harvard (espacio de direcciones separado para código y datos), mientras que los microprocesadores casi todos usan la arquitectura Von Neumann (espacio de direcciones combinado para código y datos) .

Entre los ejemplos de familias de microntroladores que utilizan la arquitectura Harvard se incluyen: AVR, Intel 8051, PIC (excepto PIC32, ver más abajo) y ARM Cortex-M3. Una notable excepción son los procesadores Freescale, como el HCS08, que utilizan la arquitectura Von Neumann, al igual que la hélice Parallax.

Esto afecta la programación de varias maneras (los ejemplos que se muestran a continuación usan C):

Puede haber varios tipos de RAM, cada uno con su propio espacio de direcciones. Por ejemplo, el 8051 tiene datos externos (xdata) que se abordan por separado de los primeros 256 bytes de RAM, aunque ambos se implementan en el mismo chip. Entonces uno tiene que usar calificadores en declaraciones de variables comounsigned int xdata foo;

Si las constantes se declaran en la memoria de código, es posible que deban copiarse en la RAM antes de poder acceder a ellas. O bien, debe haber una forma de acceder a la memoria de código como si se tratara de datos, por ejemplo, el calificador de código para 8051s o la función de Visibilidad de espacio de programa (PSV) de PIC.

Estas formas no estándar de acceder al código y la RAM tienden a ser la principal diferencia (además de los periféricos) cuando se transfiere el código C de una familia de chips a otra.

No puede ejecutar código desde RAM en una arquitectura estricta de Harvard, por lo que no puede haber ningún código de modificación automática (a menos que cuente la memoria del programa que vuelve a parpadear sobre la marcha). Sin embargo, el PIC32 tiene una arquitectura Harvard modificada que permite que el código se ejecute en la RAM. La Parallax Propeller en realidad hace uso de su capacidad para modificar el código para realizar retornos de subrutina, ya que no tiene una pila de hardware.

tcrosley
fuente
1

Un microcontrolador es generalmente una solución de un solo chip para proporcionar funciones periféricas y de computación.

Un microprocesador proporciona las funciones de cálculo pero no las funciones periféricas.

Las funciones periféricas pueden ser tan simples como tener unos pocos bits de E / S simple; o puede incluir contadores y temporizadores sofisticados, pantalla de video, ethernet, control de motor, códec de audio y video, etc.

Para una arquitectura dada (digamos las CPU y MCU basadas en x86), la codificación "computacional" será idéntica. Pero la forma en que accede a las funciones periféricas variará, por lo que tendrá que realizar una codificación específica de hardware muy diferente, en función de cómo se implemente la funcionalidad periférica en su hardware objetivo.

Constructor de juguetes
fuente
1

Los microprocesadores se usan típicamente en computadoras que están construidas para ejecutar programas de propósito arbitrario aún por determinar. Tales computadoras generalmente tendrán algún código proporcionado por el proveedor con el que se espera que el código proporcionado por el usuario interactúe. Los microcontroladores, por el contrario, se usan típicamente en máquinas que están construidas con el único propósito de ejecutar un solo programa. A menudo, alguien que escribe código para un microcontrolador proporcionará todas las instrucciones que ejecutará la máquina.

Algunos microcontroladores usan los mismos conjuntos de instrucciones que los microprocesadores populares. El conjunto de instrucciones 68000 utilizado en las líneas originales de computadoras personales Macintosh, Amiga y Atari ST también se ha utilizado en algunos microcontroladores. Aunque el conjunto de instrucciones utilizado por un Macintosh y una placa de control basada en 68HC340 es el mismo, sin embargo, la programación para las dos plataformas puede ser muy diferente. En Macintosh, cuando un programa proporcionado por el usuario comience a ejecutarse, gran parte del sistema ya estará "configurado". El código que quiere un bloque de memoria puede cargar registros con la cantidad necesaria y ejecutar una instrucción "A-trap". El sistema operativo Macintosh devolverá un puntero a alguna memoria que no se haya asignado previamente para algún otro propósito, y marcará esa área de memoria para que gane ' t se asignará nuevamente hasta que se indique que el destinatario original ya no lo necesita. Por el contrario, en una placa con 68HC340 y 128K de RAM, no hay necesidad o capacidad de "pedir" RAM. Cuando se inicia el programa, "obtendrá" 128K que puede usar como quiera; nada más lo usará, pero por otro lado, el programa del usuario debe realizar un seguimiento de qué áreas está utilizando para qué fines, ya que nada más lo hará.

Si bien la distinción aquí es realmente entre un microordenador versus un microcontrolador, y la pregunta es acerca de los microprocesadores, la mayoría de las discusiones sobre programación de microprocesadores lo discuten en el contexto de una computadora de uso general.

Super gato
fuente
0

Microprocesador: un módulo de hardware digital que ejecuta instrucciones. El módulo puede ser un circuito integrado completo.

Microcontrolador: un módulo completo que contiene un microprocesador con memoria interna además de otros módulos.

Miguel
fuente
Bienvenido a EESE, Mike. Use <enter> x 2 para el salto de párrafo. Lo he arreglado para ti.
Transistor