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

9

Por lo tanto, a menudo veo libros / tutoriales y referencias al programar en ensamblaje 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, otros lo llaman microcontrolador?

¿Qué es? ¿Y está programándolos (básicamente) lo mismo? (en montaje)

    
pregunta

6 respuestas

14

Esto es realmente dos preguntas en una ...

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

Microprocesador es simplemente una CPU que sigue un conjunto de instrucciones leídas desde un bus de memoria externo. Controla los periféricos externos (como la pantalla, el teclado, el mouse, el 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 inicio, que inicialmente lee el sistema operativo desde el disco duro a la memoria RAM, y luego continúa ejecutándolo desde allí.

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

En segundo lugar, ¿la programación de un microcontrolador y un microprocesador es lo mismo?

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 se 'compila' el lenguaje ensamblador, realmente no compila nada, todo lo que hace es convertirlo en una secuencia de bytes que representan los comandos y los enchufes en algunas ubicaciones de memoria relativas. Esto es común tanto para los microprocesadores como para los microcontroladores.

Sin embargo, diferentes tipos de CPU comprenden un conjunto diferente de instrucciones de CPU. Por ejemplo, si escribe un programa en lenguaje ensamblador que funciona con un microcontrolador pic 16F877, será un completo disparate para un microprocesador o cualquier otro microcontrolador fuera de la familia de microcontroladores picfix 16Fxxx.

Entonces, aunque el ensamblaje funciona de manera similar en todos los microprocesadores y microcontroladores, la lista real de instrucciones que escribe es muy diferente. 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.

    
respondido por el 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 fueron dispositivos externos. En lugar de los microprocesadores de E / S, la dirección y el bus de datos llegaron a sus pines.
La forma en que escribes el código para cualquiera 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 (algo de 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.

    
respondido por el stevenvh
8

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

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

Esto afecta a 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 dirigen de forma separada 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 como unsigned int xdata foo;

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

Estas formas no estándar de acceso 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 la RAM en una arquitectura estricta de Harvard, por lo que no puede haber ningún código de auto-modificación (a menos que cuente la memoria del programa de re-flasheo sobre la marcha). Sin embargo, el PIC32 tiene una arquitectura modificada de Harvard que permite que el código se ejecute en la RAM. Parallax Propeller realmente hace uso de su capacidad para modificar el código para realizar devoluciones de subrutinas, ya que no tiene pila de hardware.

    
respondido por el tcrosley
1

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

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 podría incluir contadores y temporizadores sofisticados, visualización de video, Ethernet, control de motor, códec de audio y video, etc. •

Para una arquitectura determinada (por ejemplo, las CPU y MCU basadas en x86), la codificación "computacional" será idéntica. Pero la forma en que acceda a las funciones periféricas variará, por lo que tendrá que hacer una codificación específica de hardware muy diferente, según la forma en que se implementa la funcionalidad periférica en su hardware objetivo.     

respondido por el Toybuilder
1

Los microprocesadores se utilizan normalmente en computadoras que están construidas para ejecutar programas de propósito arbitrario aún por determinar. Dichas computadoras generalmente tendrán algún código suministrado por el proveedor con el que se espera que interactúe el código suministrado por el usuario. Los microcontroladores, por el contrario, se utilizan normalmente en máquinas que se construyen con el único propósito de ejecutar un solo programa. A menudo, alguien que escribe el código para un microcontrolador suministrará cada instrucción que ejecutará la máquina.

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

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

    
respondido por el supercat
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.

    
respondido por el Mike

Lea otras preguntas en las etiquetas