¿Por qué hay un reloj en mi arduino?


9

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?


3
Está confundiendo entre las instrucciones C y las instrucciones de la máquina (ensamblaje). Pero incluso si escribió directamente en ensamblador, podría encontrar un buen uso de eso porque el programa NO es lineal. Quiero decir, las interrupciones, como su nombre lo indica, interrumpen el flujo de código normal yendo a otra instrucción y luego reanudando. Así que tal vez entre una línea y la siguiente se ve obligado a ejecutar el ISR, que puede ser muy largo
frarugi87

2
Si registra su chip a ocho milihercios, incluso la línea de código más simple tomará una eternidad. Le sugiero que use un reloj en el rango de mega hertz (MHz).
Edgar Bonet

El número de ciclos necesarios para ejecutar cada instrucción de máquina se indica en el Manual del conjunto de instrucciones .
Edgar Bonet

Maldición, debería irme a dormir;), editado gracias
no es

Respuestas:


13

¿Por qué hay un reloj en mi arduino?

Porque así es como funcionan las computadoras y los microcontroladores, etc.

Con un reloj de 16mhz, cada línea de mi programa tomará 1/16000000 segundos, ¿verdad?

No.

incluso una línea muy muy grande solo tomará 1/16000000 de segundo?

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.

Con un reloj de 8 mhz, cada línea tomará el doble de tiempo, ¿verdad? Entonces todo el "ciclo principal" tomará el doble de tiempo también, ¿verdad?

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í.


También, interrumpe.
njzk2

1
Nitpick menor: debe ser "... en cualquier lugar de 0 instrucciones de montaje ...", incluso sin optimizador, pero aún más después de la optimización.
Peter

2
No confundas al pobre chico. Ya lo está pasando bastante mal.
Majenko

@Majenko: la confusión es una necesidad. Es difícil.
intelfx

@intelfx "IT"? Esto es programación, no TI ...
BalinKingOfMoria Reinstate CMs

10

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.


El AVR tiene una canalización muy superficial: solo busca y ejecuta. Luego, los saltos condicionales toman un ciclo (salto no realizado) o dos ciclos (salto realizado).
Edgar Bonet

Complicación adicional: errores de caché.
Martín-Blas Pérez Pinilla

Hay muchas cosas que no mencioné: caché (de cualquier tipo), multihilo, multi-núcleo ... Probablemente ya profundicé demasiado en mi publicación.
AMADANON Inc.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.