¿Qué debo saber si quiero pasar de microcontroladores a microprocesadores? [cerrado]

Estoy familiarizado con el uso de microcontroladores, tanto con frameworks como Arduino como de forma nativa (PIC/AVR). También estoy familiarizado con la arquitectura general de los sistemas integrados, en la medida en que sé que tiene un procesador con RAM discreta y ROM/flash conectado a través de varios buses. Sin embargo, nunca he construido un proyecto desde cero utilizando un microprocesador.

¿Qué debo saber antes de pasar a proyectos basados ​​en microprocesadores? Por ejemplo, en un microcontrolador, estoy acostumbrado a enviar un código a través de mi compilador y obtener un binario que se puede cargar a través de ISP o similar. ¿Cómo funciona esto con un procesador con flash discreto? ¿Y qué pasa con las fuentes de reloj? ¿Los procesadores normalmente vienen con un reloj interno como lo hacen las MCU? Estoy seguro de que también hay muchas "incógnitas desconocidas", ¿dónde debo buscar para comenzar?

Estoy principalmente interesado en las plataformas ARM y x86, pero también sería útil un consejo general.

Lo único que realmente cambia es el mecanismo de carga. Y ese mecanismo puede tomar cualquiera de docenas de formas.
@ IgnacioVazquez-Abrams No veo cómo puede ser ese el caso; seguramente hay complejidades en la forma en que se accede a la RAM / ROM que no existen en las MCU.
Sólo con la forma en que está conectado. De lo contrario, todavía usa los buses de dirección y datos como de costumbre.
Con los SoC modernos, la distinción entre los dos es bastante marginal y en gran medida una cuestión de pedantería. Más una cuestión de qué tipo de cosas tiene en el sistema, por ejemplo, DRAM externa, controladores de memoria, etc.
El bus de E/S está más "desconectado" del núcleo en los microprocesadores modernos que en los microcontroladores pequeños. Mire una métrica como qué tan rápido puede alternar un pin de E/S a través del software dividido por el MIPS. Fácilmente podría ser más de un orden de magnitud más alto en un pequeño microcontrolador.
¿Le importaría al votante negativo explicar su razonamiento? No puedo escribir mejores preguntas sin comentarios.
No soy el votante negativo, pero veo que un voto para cerrar se basa principalmente en la opinión (y debido a eso, la pregunta ingresó a la cola de revisión de votos cerrados; así fue como llegué a ella). Esa puede ser la razón del voto negativo. No estoy emitiendo un voto para cerrarla o dejarla abierta (es decir, me estoy saltando la pregunta), pero la larga fila de comentarios que se está formando sobre la pregunta y sobre una de las respuestas puede ser señal de demasiada discusión.

Respuestas (2)

La principal diferencia en estos sistemas es que, por lo general, no ejecutan la mayoría directamente fuera de la memoria flash; en su lugar, habrá un pequeño programa en la memoria flash que actúa como cargador de arranque, y luego el programa se copiará desde algún medio como una tarjeta SD, SSD o disco duro en la RAM, desde donde se ejecuta. Si es necesario actualizar el cargador de arranque, habrá algún medio, ya sea a través del microprocesador o externo, para actualizarlo y reprogramarlo.

Entonces, cuando actualice su programa, se descargará a su sistema y luego se escribirá en la tarjeta SD, SSD o disco duro, lo que sea que tenga.

Cuando se está ejecutando, realmente no hay diferencia entre un microcontrolador y un microprocesador. Es solo que en el último caso, hay mucha más RAM (quizás varios cientos de MB) de la que encontraría en un microcontrolador. A la CPU no le importa si se está quedando sin RAM o flash. Una cosa que debe tener en cuenta: un programa erróneo puede borrarse en la RAM, mientras que esto no puede suceder en la memoria flash.

Los microprocesadores casi siempre tendrán un cristal externo como fuente de reloj. El procesador puede usar un PLL (bucle de bloqueo de fase) para multiplicar la frecuencia del cristal hasta un valor mucho más alto (varios cientos de MHz o incluso un GHz). Esto será parte del código de inicialización.

Acceder a los periféricos es esencialmente lo mismo que con un microcontrolador; simplemente son externos al chip en lugar de estar dentro de él, por lo que el acceso no es tan rápido. (Los únicos "periféricos" normalmente en un chip x86 son temporizadores, DMA y controlador de interrupción). El procesador se comunica con los dispositivos periféricos a través de puertos de E/S.

Sin embargo, XIP es definitivamente increíble.
@IgnacioVazquez-Abrams Gracias, no estaba al tanto de eso.

En mi opinión, uno de los mejores métodos para discriminar entre una MPU y una MCU es si la CPU incluye una unidad de administración de memoria (MMU), es decir, un mecanismo de hardware para mapear bloques de memoria no contiguos en un espacio contiguo virtual en la mosca, con el mapeo dependiendo de qué proceso se está ejecutando.

Esto permite que los procesos individuales usen cualquier memoria que puedan "ver" y protege cualquier memoria que no puedan "ver" de accesos accidentales.

Una CPU con una MMU es una MPU; una CPU sin MMU es una MCU.

Lo siento, pero simplemente mal. Los microprocesadores anteriores (8080, 6800, 6502, 8086 original, Z80, incluso el 68000) no tenían una MMU, pero definitivamente eran microprocesadores, no microcontroladores. No tenían memoria integrada ni periféricos. El 68030 fue uno de los primeros microprocesadores en tener una MMU integrada. El 8051 fue uno de los primeros microcontroladores. Una mejor distinción entre microprocesadores y microcontroladores es si tienen un bus de direcciones externo, cierto en la mayoría de los casos. Ver esta respuesta para más.
@tcrosley No, no me equivoco; si estuviera equivocado lo sabría. De hecho, me estoy refiriendo a la opinión de ARM; Creo que estoy en un terreno bastante seguro al aceptar que saben de lo que están hablando. Se pueden aplicar algunos criterios adicionales, por ejemplo, memoria externa, pero tener una MMU tiene sentido debido a su relevancia para la multitarea (a diferencia de los subprocesos múltiples).
ARM es un caso especial porque fabrican algunos microcontroladores con buses de direcciones externos, por lo que son una combinación de un microprocesador y un microcontrolador. Como quieran llamarlos es asunto de ellos. No es la vista principal. Ver esto y esto y esto . No se menciona la UMM como criterio.
@trcosley sí... Esos no son mucho más que guías de ventas, creo que me quedaré con el punto de vista de ARM. No digo que otros factores no sean relevantes, pero la presencia de una MMU lo hace o lo deshace en lo que a mí respecta.
Entonces, ¿está diciendo que el 8080, 6800, 6502, 8086, Z80 y 68000 no eran microprocesadores? ¿Que eran? Ciertamente no microcontroladores, no tenían memoria ni periféricos en el chip. Hicieron la distinción entre microcontroladores (8048, 8051) y microprocesadores incluso entonces.
@tcrosley Como dije, no es el único criterio, solo el más importante. Además, es probable que existan limitaciones históricas de capacidad técnica que expliquen por qué la mayoría de los procesadores que ha enumerado no eran soluciones de un solo chip, simplemente no se podía hacer todavía (al menos a un precio viable). Demonios, no me importa, llámalos como quieras, te estás poniendo de mal humor con la semántica. Te guste o no, nuestras opiniones no coinciden y es poco probable que lo hagan. Podríamos discutir si el negro es un color o un tono a continuación, si lo desea.
Siempre que reconozca la importancia histórica de los primeros microprocesadores, que no tenían MMU, aunque concedo que prácticamente todos los microprocesadores actuales tienen MMU (no puedo pensar en ninguno que no las tenga), entonces creo que podemos terminar nuestro debate.
@tcrosley De acuerdo.