Se trata de cómo funcionan los microcontroladores en general.
La programación que hacemos se convierte en 1 y 0 por el compilador y este código comprensible de la máquina se carga en el microcontrolador.
¿Cómo responde el microcontrolador a esto? Quiero decir, ¿son estos 1 y 0 convertidos en el voltaje lógico correspondiente (5v y 0) por DAC? Si es así, ¿cómo decide esta pequeña pieza de silicio qué hacer con estas diversas combinaciones de 5v y 0v?
Entiendo que cada IC está hecho de compuertas lógicas y estas compuertas están compuestas de transistores. Entonces, ¿cómo responden estos transistores a varias combinaciones de 5v y 0v?
¿Qué los hace buscar estas lógicas? Quiero decir, ¿cómo monitorean estas instrucciones cuando se encienden?
Entonces, ciertamente debe haber un sistema operativo cargado en el mcu que le indique que procese y cómo procesar estas instrucciones, ¿no?
Lo siguiente es ... considere un temporizador ... es simplemente un registro que se incrementa en uno después de cada ciclo de reloj ... ¿No es nuevamente el sistema operativo el que le indica al MCU que se incremente después de cada reloj? Estoy en lo cierto? En ese caso, ¿en qué idioma se escribe todo el código para un sistema operativo?
Simplemente puedo continuar mi trabajo con la programación de mcu para diferentes tareas, pero hoy estaba interesado en saber cómo esta máquina entiende mi código.
Lamento que mi pregunta sea larga de leer ... por favor, ayúdenme a aprender estas cosas básicas ...
Gracias por adelantado..
fuente
Respuestas:
No hay necesidad de usar un DAC. Los voltajes se usan para representar 1's y 0's por la convención de que cualquier cosa por debajo de 0.8V (AKA 'bajo') es un cero, y cualquier cosa por encima de 2.4V (AKA 'alto') es uno. Es relativamente simple construir circuitos que realicen lógica en estos voltajes representativos.
Por ejemplo, un circuito puede emitir algo en el rango de 2.4V a 5V para representar '1' si cualquiera de las entradas está por encima de 2.4V, o algo menos de 0.8V de lo contrario, y tiene una puerta OR. Si requiere que ambas entradas representen 1 para emitir 2.4V, tiene una compuerta AND. Un inversor solo emite un valor alto cuando la entrada es baja, y viceversa. Puede construir puertas simples como estas con solo unos pocos transistores y realizar una lógica booleana combinatoria. Al usar grupos de bits para representar números, incluso puede construir circuitos para agregar números con lógica combinatoria, sin necesidad de software.
Una vez que esté trabajando con puertas, puede construir chanclas y, a partir de ellas, registros y contadores. Las chanclas le permiten almacenar 1 y 0 desde un punto en el tiempo y usarlos más adelante. Los registros y contadores son circuitos que realizan funciones en grupos de bits que representan números. Un registro contiene un número hasta que cargue un nuevo número en él. Un contador es como un registro, pero tiene otra entrada que hace que el número almacenado se incremente. (La disminución también es posible). Esto lo coloca en el ámbito de las máquinas de estado y la lógica secuencial, aún así, no se requiere software.
Los sistemas de memoria son una forma de almacenar cantidades masivas de bits. A nivel de componente, parte de la memoria se construye como una gran colección de flip-flops, pero más comúnmente existe otra tecnología (DRAM) que, aunque no es exactamente un flip-flop, hace lo mismo.
Como un paso más, puede construir un sistema de lógica secuencial y combinatoria que puede llevar a cabo operaciones dependiendo de los bits almacenados en un sistema de memoria, incluida la escritura de nuevos valores en ese sistema de memoria. Ahora que ha llegado al nivel del procesador, y todo lo que hace el procesador, es solo hardware que realiza muchas tareas simples. (no obstante los núcleos microprogramados). En este punto, las combinaciones particulares de bits que coloca en el sistema de memoria pueden considerarse software de lenguaje de máquina.
fuente
Obtenga el libro "Código: El lenguaje oculto del hardware y software de computadoras" de Charles Petzold . Es impresionante, fácil de leer y responderá muchas de esas preguntas.
Si no puede pagar el libro de Petzold, consulte "Cómo funcionan las computadoras" de Roger Young . Cubre muchas de las mismas cosas, y las versiones HTML y PDF son gratuitas.
fuente
Considere un NPN BJT; Un transistor. Uno de los primeros descubiertos.
Ahora lo conecta de manera tal que el colector esté conectado a una entrada lógica variable, y el emisor esté conectado a otra entrada lógica, con una resistencia en serie. Luego, una resistencia del emisor a tierra.
Acaba de construir una puerta AND. La salida solo es alta cuando ambas entradas son altas. No es perfecto de ninguna manera, ya que depende de la entrada al colector y porque no se despliega bien, pero le da una idea de cómo se pueden usar los transistores para calcular una función.
Entonces, también puedes construir una puerta NOT;
Agregar esto a la salida de la compuerta AND recién construida nos da una compuerta NAND, y quizás sepa que con una compuerta NAND puede construir cualquier forma de lógica. También tiene la ventaja de que la señal está protegida, lo que aumenta el abanico y la capacidad de encadenamiento.
Los procesadores reales rara vez usan BJT, pero en su lugar la lógica CMOS, pero se aplican los mismos principios.
fuente
Tal vez debería buscar algunas referencias de sistemas digitales o buscar cosas como VHDL. Una MCU está diseñada básicamente con bloques de construcción, que pueden ser una variedad de puertas lógicas y bloques de construcción (más pequeños). En última instancia, todo se reduce a puertas lógicas que de hecho están compuestas por transistores. Un MCU simple típico como un PIC18F o algo no ejecuta un sistema operativo. El programa que carga en él son un montón de instrucciones de la máquina que el PIC ejecuta continuamente. Todo el proceso se realiza por hardware.
Un proccesor general generalmente tiene una ALU (calcula el resultado de una determinada instrucción) y más bloques a su alrededor que carga las instrucciones, administra la pila y administra la memoria. El procesador tiene algunos registros para trabajar con él, principalmente para cargar entradas y almacenar resultados. Es posible que no vea mucho de esto en C u otro lenguaje, pero mucho en ensamblador.
La ALU maneja instrucciones con ciertos códigos de operación y entradas. Por ejemplo, una instrucción típica podría ser ADD 12 1, lo que significa 12 + 1 = 13. El resultado se almacena en un registro en el propio procesador.
Dependiendo de la arquitectura, la ALU tiene, por ejemplo, 8 bits de ancho. Un simple sumador de 8 bits puede estar compuesto de 8 sumadores de 1 bit unidos (utilizando bloques para construir un bloque más grande). Un sumador de 1 bit se puede escribir fácilmente en puertas lógicas utilizando álgebra booleana. Escribir un sumador de 8 bits completo manualmente con solo usar puertas lógicas sería una cantidad increíble de trabajo. Es como escribir un programa sin tener la capacidad de utilizar ninguna función o subrutinas.
Para que los sistemas digitales funcionen correctamente, la mayoría de los bloques están diseñados para funcionar según el reloj. Cada sistema digital tiene una cierta cantidad de tiempo requerido para alcanzar su estado final. Esto se debe a retrasos en el cambio de transistores y estados que influyen en otros estados. La señal del reloj es algo con lo que debería estar familiarizado, la velocidad con la que funciona el procesador. Un temporizador podría ser un dispositivo realmente simple que tiene un pequeño bloque de sumador y se incrementa en 1 cada vez que se activa el reloj.
fuente
Este es un gran tema y no puedo dar una respuesta simple pero ...
Puede acercarse un poco más a esta respuesta dividiendo y conquistando, y dado que la otra respuesta intenta atacar este problema desde un punto de vista hw, lo intentaré desde una vista SW de alto nivel.
Si escribe algún software en digamos código c (un nivel muy alto de abstracción), realmente no ve lo que está sucediendo, realmente no comprende todas las cosas de amantes que está preguntando.
Pero comencemos allí de todos modos.
Un programa simple que solo incluye una variable.
Luego, necesitamos obtener el código del ensamblador para que podamos entender lo que está sucediendo. Este paso se puede hacer en cualquier plataforma que use, pero para simplificarlo uso gcc en una PC (pero no importa ...)
Luego terminamos con algo como esto:
Luego intenta comprender cada línea de código y lo que hace.
Y luego comienzas a ver cómo se implementa cada instrucción ... Por ejemplo, el subl
En este punto, es diferente en diferentes arquitecturas y x86, arm, pic es algo diferente ... Pero como mi ejemplo fue x86.
http://en.wikipedia.org/wiki/X86_assembly_language
subl $ 4,% esp / * asigna 4 bytes de espacio de pila para las variables locales de esta función * /
Y en este nivel, cuando lees la copia, la mayoría de las acciones parecerán que solo estás moviendo números, y en cierto sentido esto es lo que está sucediendo. Tenemos un programa predefinido que atravesamos, este programa se almacena en algún tipo de memoria flash que generalmente es algún tipo de lógica electrónica que atrapará un nivel lógico.
Si ves algún tipo de " Flip-flop " para cada bit, entonces estás un poco cerca, y entonces necesitamos muchos de esos. Aquí comenzamos a encontrar sus unos y ceros.
Luego, para que se produzca alguna acción, agregamos una lógica genial que puede transformar un número en otro número (la CPU misma).
Y luego seguimos el programa paso a paso, y para saber dónde estamos tenemos un contador de programa (PC). Y mueva los números hacia atrás y cuarto y almacénelos en otra memoria que también es una especie de cuadrícula con flip-flops.
Pero volvamos a un ejemplo específico nuevamente, para comprender un poco mejor la CPU, podemos echar un vistazo a la ALU y a esta imagen simplificada . Donde puede ver que cuando movemos datos a este bloque lógico y seleccionamos alguna operación con los pines OP, obtendremos un nuevo resultado en la salida. Que a su vez podemos regresar a algún lugar en la memoria.
Y para maldecir su ALU en su CPU, la parte de su MCU es mucho más compleja que esta, pero funciona con el mismo principio básico.
En este punto, podemos ver algún circuito lógico que hace el "trabajo" en un lado, y algo de almacenamiento en el otro lado. Y el almacenamiento tiene dos partes, una para el programa y otra para los datos. Pero, ¿cómo nos "movemos" realmente, entonces esos deben estar conectados de alguna manera ...
Y aquí es donde conectamos esas partes con un autobús.
Un bus son solo algunos cables que conectan las diferentes partes, y luego la lógica de control le dice a la memoria qué datos enviar a este bus, y qué parte de la CPU debe escuchar estos datos enviados. Y esto se hace con algunas líneas de control paralelas que habilitarán / deshabilitarán las diferentes partes.
...
Entonces, si toma su mcu de elección y disecciona un programa muy pequeño, y siempre que no entienda lo que está sucediendo, lo diseccionará aún más hasta que tenga un pequeño rompecabezas que pueda usarse para crear un "mcu".
Y no se olvide de leer la hoja de datos de su mcu y ver qué tipo de partes se hizo, como qué tipo de memoria, aluminio, buses, etc.
Espero que esto ayude un poco ???
Buena suerte
fuente
Realmente no necesita saber estas cosas a menos que esté a punto de diseñar CPU usted mismo, pero todo se reduce a una gran máquina de estado implementada en hardware.
El mayor problema con este tipo de preguntas es que la respuesta es enorme y requiere varios años de cursos universitarios, por lo que cualquier respuesta que obtenga aquí solo rascará la superficie.
Si realmente desea saber qué incluye una CPU, consulte el código fuente de vhdl / verilog en: http://opencores.org/projects
Solo aprender vhdl y verilog será una tarea enorme por sí mismo, por lo que te espera una lectura larga :)
fuente
No, no es un DAC. Los 1 y 0 nunca existen realmente. Son solo una abstracción matemática que utilizamos para facilitar la programación. Los voltajes digitales reales pueden ser de 5 V, 3.3 V o 1 V, dependiendo del hardware. En última instancia, una computadora es solo lógica digital. La memoria almacena los 1 y los 0 como lógica digital, un circuito lógico digital los transfiere de la memoria al procesador, el procesador es un circuito lógico digital que puede sumar, restar o comparar números binarios, etc.
Silic a es vidrio, una mezcla de silicio y oxígeno. Fichas están hechas de pura silícico en , con impurezas añadidas en lugares específicos para que todos los transistores.
Los circuitos integrados digitales están hechos de puertas lógicas, no circuitos integrados analógicos.
Lea sobre el ejemplo más simple, el inversor CMOS .
fuente