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.