Perché c'è un orologio nel mio arduino?


9

Naturalmente so che è utile controllare il tempo di un ritardo, ma qualsiasi altro uso?

Con un orologio a 16Mhz, ogni riga del mio programma impiegherà 1/16000000 di secondo, giusto?

anche una linea molto grande richiederà solo 1/16000000 di secondo?

Con un orologio a 8 MHz, ogni linea impiegherà il doppio del tempo, giusto? Quindi anche l'intero "ciclo principale" richiederà il doppio tempo, giusto?


3
Stai confondendo tra le istruzioni C e le istruzioni della macchina (assemblaggio). Ma anche se scrivessi direttamente in assembly, potresti trovarne un buon uso perché il programma NON è lineare. Voglio dire, gli interrupt, come suggerisce il nome, interrompono il normale flusso di codice andando a un'altra istruzione e poi riprendendo. Quindi forse tra una riga e la successiva è costretto a eseguire l'ISR, che potrebbe essere molto lungo
frarugi87

2
Se si esegue il clock del chip a otto millihertz, anche la riga di codice più semplice richiederà un'eternità. Ti suggerisco di usare un orologio nella gamma mega hertz (MHz).
Edgar Bonet,

Il numero di cicli necessari per eseguire ciascuna istruzione della macchina è indicato nel Manuale del set di istruzioni .
Edgar Bonet,

Accidenti dovrei andare a dormire;), modificato grazie
n0tis

Risposte:


13

Perché c'è un orologio nel mio arduino?

Perché è così che funzionano computer, microcontrollori, ecc.

Con un orologio a 16mhz, ogni riga del mio programma impiegherà 1/16000000 di secondo, giusto?

No.

anche una linea molto grande richiederà solo 1/16000000 di secondo?

No.

L'orologio definisce a quale velocità le istruzioni del codice macchina vengono recuperate dalla memoria ed eseguite. La maggior parte delle istruzioni richiede 1 ciclo di clock, ma alcune richiedono di più.

Una riga di codice C può essere compilata in un numero qualsiasi di istruzioni di assemblaggio, che vengono poi convertite in codice macchina (numeri grezzi). Potrebbe essere ovunque da 1 istruzione di assemblaggio a migliaia di istruzioni di assemblaggio, a seconda di ciò che fa la linea.

Con un orologio da 8 mhz, ogni riga impiegherà il doppio del tempo, giusto? Quindi anche l'intero "ciclo principale" richiederà il doppio tempo, giusto?

Ogni operazione nel chip è regolata dall'orologio. Se l'orologio è a metà della velocità, il chip funziona a metà della velocità, quindi ogni operazione richiederà il doppio del tempo, sì.


inoltre, interrompe.
njzk2,

1
Minore nitpick: dovrebbe essere "... ovunque da 0 istruzioni di montaggio ...", anche senza ottimizzatore, ma anche di più dopo l'ottimizzazione.
Peter,

2
Non confondere il povero ragazzo. Sta attraversando un periodo abbastanza difficile.
Majenko

@Majenko: la confusione è una necessità. È difficile.
intelfx,

@intelfx "IT"? Questa è programmazione, non IT ....
BalinKingOfMoria Ripristina CM

10

Non ha risposto nel post di @ Majenko: Sì, con un orologio a 8 MHz, ogni riga impiegherà il doppio del tempo. A meno che la linea non aspetti qualcosa che non è guidato dall'orologio, ad esempio un ingresso esterno.

Oltre alla risposta di @ Majenko, una CPU ha un orologio per garantire che le istruzioni siano complete, prima che inizi il passaggio successivo. Una CPU è composta da molti transistor (ho trovato un riferimento che indicava che l'AtMega era nell'intervallo di milioni bassi, dare o prendere un ordine di grandezza).

Durante un ciclo, l'elettricità scorre attraverso il chip, attivando / disattivando i transistor, i cui risultati accenderanno / spegneranno più transistor e così via lungo la linea. Mentre ciò sta accadendo, alcune parti del chip hanno un valore "sbagliato" - puoi pensare che questo sia a metà strada attraverso un calcolo (hai aggiunto la colonna di una e la colonna 10 e stai per iniziare sul Colonna 100s). Non vuoi che ciò influisca sul mondo esterno, quindi (per esempio) i tuoi pin di output sono bloccati - mantenuti a qualunque valore siano - fino a quando l'istruzione è completa. Il tempo necessario per completare un'istruzione varia, ma il produttore elabora l'istruzione più lenta nelle peggiori circostanze.

Per AtMega (che è il chip su Arduino), Atmel (che ha progettato il chip) ha dichiarato che questo è 1 / 20.000.000 di secondo - questo è 20MHz.

Si noti che non tutti i microprocessori eseguono tutte le loro istruzioni con 1 istruzione per ciclo - alcune istruzioni potrebbero richiedere 1, o 2 o 10 cicli. Il pipelining rende le cose ancora più complicate - un processore potrebbe svolgere un po 'del lavoro (ad esempio recuperare l'istruzione successiva) in un ciclo, eseguirlo nel successivo - ma mentre esegue l'istruzione 1, può anche recuperare l'istruzione successiva. Per fare questo, potrebbe essere necessario indovinare quale istruzione verrà dopo (nel caso dell'equivalente in codice macchina di un "goto" - tale è usato per i loop), e se indovina, deve far fronte quello; butta via le istruzioni recuperate e recupera quella successiva, perdendo un ciclo.

La pagina Wikipedia sul pipelining delle istruzioni mostra un esempio di pipelining di un chip RISC in 5 fasi: recupero delle istruzioni, decodifica delle istruzioni, esecuzione, accesso alla memoria e riscrittura. Quindi, puoi avere 5 istruzioni in una fase dell'esecuzione, sovrapposte. Fino alla fase di "riscrittura", le istruzioni non hanno alcun effetto reale. Puoi pensare a questo come a una catena di montaggio: ci vogliono 7 minuti per mettere insieme un widget, ma può essere suddiviso in 5 fasi, la fase più lunga impiega 2 minuti. Una volta ogni due minuti, ciascun widget parzialmente completato viene spostato dalla linea di assemblaggio alla stazione successiva. Ottieni un widget ogni due minuti - L'orologio può spuntare solo il passo più lento. Se si espelle il widget più velocemente, il "collo di bottiglia" farà accodare sempre più widget.


L'AVR ha una pipeline molto superficiale: solo prendere ed eseguire. Quindi, i salti condizionati richiedono un ciclo (salto non eseguito) o due cicli (salto eseguito).
Edgar Bonet,

Complicazione aggiuntiva: cache cache.
Martín-Blas Pérez Pinilla,

Ci sono molte cose che non ho menzionato: cache (di qualsiasi tipo), multi-thread, multi-core ... probabilmente sono già andato troppo in profondità nel mio post.
AMADANON Inc.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.