Por supuesto, sé que es útil controlar el tiempo de un retraso, pero ¿algún otro uso?
Con un reloj de 16Mhz, cada línea de mi programa tomará 1/16000000 segundos, ¿verdad?
incluso una línea muy muy grande solo tomará 1/16000000 de segundo?
Con un reloj de 8MHz, cada línea tomará el doble de tiempo, ¿verdad? Entonces todo el "ciclo principal" tomará el doble de tiempo también, ¿verdad?
oscillator-clock
n0tis
fuente
fuente
Respuestas:
Porque así es como funcionan las computadoras y los microcontroladores, etc.
No.
No.
El reloj define a qué velocidad las instrucciones del código de máquina se obtienen de la memoria y se ejecutan. La mayoría de las instrucciones toman 1 ciclo de reloj, pero algunas toman más.
Se puede compilar una línea de código C en cualquier cantidad de instrucciones de ensamblaje, que luego se convierten en código de máquina (números sin procesar). Eso podría ser desde 1 instrucción de ensamblaje hasta miles de instrucciones de ensamblaje, dependiendo de lo que haga la línea.
Cada operación en el chip se rige por el reloj. Si el reloj tiene la mitad de la velocidad, el chip funciona a la mitad de la velocidad, por lo que cada operación tomará el doble de tiempo, sí.
fuente
No respondió en la publicación de @ Majenko: Sí, con un reloj de 8MHz, cada línea tomará el doble de tiempo. A menos que la línea espere algo que no esté activado por el reloj, por ejemplo, entrada externa.
Además de la respuesta de @ Majenko, una CPU tiene un reloj para garantizar que las instrucciones estén completas, antes de que comience el siguiente paso. Una CPU está hecha de muchos transistores (encontré una referencia que indicaba que AtMega estaba en el rango de millones bajos, más o menos un orden de magnitud).
Durante un ciclo, la electricidad fluye a través del chip, activando / desactivando los transistores, cuyos resultados activarán / desactivarán más transistores, y así sucesivamente. Mientras esto sucede, algunas partes del chip tienen un valor "incorrecto"; puede pensar que esto está a la mitad de un cálculo (ha agregado la columna de uno y la columna de 10, y está a punto de comenzar en el Columna de 100). No desea que esto afecte al mundo exterior, por lo que (por ejemplo) sus pines de salida están bloqueados, mantenidos en cualquier valor que sean, hasta que se complete la instrucción. El tiempo que lleva completar una instrucción varía, pero el fabricante calcula la instrucción más lenta en las peores circunstancias.
Para el AtMega (que es el chip en el Arduino), Atmel (quien diseñó el chip) ha declarado que esto es 1 / 20,000,000 de segundo, esto es 20MHz.
Tenga en cuenta que no todos los microprocesadores ejecutan todas sus instrucciones a 1 instrucción por ciclo; algunas instrucciones pueden tomar 1, 2 o 10 ciclos. La canalización complica aún más las cosas: un procesador puede hacer parte del trabajo (por ejemplo, buscar la próxima instrucción) en un ciclo, ejecutarlo en el siguiente, pero mientras ejecuta la instrucción 1, también puede recuperar la siguiente instrucción. Para hacer esto, es posible que tenga que adivinar qué instrucción viene a continuación (en el caso del código de máquina equivalente a un "goto" - tal se usa para bucles), y si adivina mal, tiene que lidiar con ese; deseche la instrucción que recuperó y recupere la siguiente, perdiendo un ciclo.
La página de Wikipedia sobre canalización de instrucciones muestra un ejemplo de canalización de chips RISC en 5 etapas: búsqueda de instrucciones, decodificación de instrucciones, ejecución, acceso a memoria y reescritura. Por lo tanto, puede tener 5 instrucciones en alguna etapa de ejecución, superpuestas. Hasta la fase de "reescritura", las instrucciones no tienen ningún efecto real. Puede pensar en esto como una línea de ensamblaje: lleva 7 minutos armar un widget, pero se puede dividir en 5 etapas, la etapa más larga demora 2 minutos. Una vez cada dos minutos, la línea de ensamblaje mueve cada widget parcialmente completado a la siguiente estación. Obtiene un widget cada dos minutos: el "reloj" solo puede funcionar tan rápido como el paso más lento. Si empuja el widget más rápido, el "cuello de botella" obtendrá más y más widgets en cola.
fuente