Bien sûr, je sais qu'il est utile de contrôler le temps d'un retard, mais toute autre utilisation?
Avec une horloge 16Mhz, chaque ligne de mon programme prendra 1/16000000 seconde, non?
même une très très grande ligne ne prendra que 1/16000000 de seconde?
Avec une horloge à 8 MHz, chaque ligne prendra le double du temps, non? Donc toute la "boucle principale" prendra le double temps aussi, non?
oscillator-clock
n0tis
la source
la source
Réponses:
Parce que c'est ainsi que fonctionnent les ordinateurs et les microcontrôleurs, etc.
Non.
Non.
L'horloge définit à quelle vitesse les instructions du code machine sont extraites de la mémoire et exécutées. La plupart des instructions prennent 1 cycle d'horloge, mais certaines en prennent plus.
Une ligne de code C peut être compilée en un nombre quelconque d'instructions d'assemblage, qui sont ensuite converties en code machine (nombres bruts). Cela peut aller de 1 instruction d'assemblage à des milliers d'instructions d'assemblage, selon ce que fait la ligne.
Chaque opération dans la puce est régie par l'horloge. Si l'horloge est à la moitié de la vitesse, la puce fonctionne à la moitié de la vitesse, donc chaque opération prendra deux fois plus de temps, oui.
la source
Pas de réponse dans le post de @ Majenko: Oui, avec une horloge à 8 MHz, chaque ligne prendra le double du temps. A moins que la ligne n'attende quelque chose qui n'est pas piloté par horloge - par exemple une entrée externe.
En plus de la réponse de @ Majenko, un processeur dispose d'une horloge pour s'assurer que les instructions sont complètes, avant le début de l'étape suivante. Un CPU est fait de beaucoup de transistors (j'ai trouvé une référence qui indiquait que l'AtMega était dans la gamme des millions bas, donner ou prendre un ordre de grandeur).
Pendant un cycle, l'électricité circule à travers la puce, activant / désactivant des transistors, dont les résultats activeront / désactiveront plus de transistors, etc. Pendant que cela se produit, certaines parties de la puce ont une "mauvaise" valeur - vous pouvez la considérer comme étant à mi-chemin d'un calcul (vous avez ajouté la colonne un et la colonne 10s, et vous êtes sur le point de commencer le Colonne des années 100). Vous ne voulez pas que cela affecte le monde extérieur, donc (par exemple) vos broches de sortie sont verrouillées - quelle que soit leur valeur - jusqu'à ce que l'instruction soit terminée. Le temps nécessaire pour terminer une instruction varie, mais le fabricant élabore l'instruction la plus lente dans les pires circonstances.
Pour l'AtMega (qui est la puce de l'Arduino), Atmel (qui a conçu la puce) a déclaré que c'était 1/20 000 000 de seconde - c'est 20 MHz.
Notez que tous les microprocesseurs n'exécutent pas toutes leurs instructions à 1 instruction par cycle - certaines instructions peuvent prendre 1, 2 ou 10 cycles. Le pipelining rend les choses encore plus compliquées - un processeur peut effectuer une partie du travail (par exemple, récupérer l'instruction suivante) dans un cycle, l'exécuter dans le suivant - mais pendant qu'il exécute l'instruction 1, il peut également extraire l'instruction suivante. Pour ce faire, il faudra peut-être deviner quelle instruction vient ensuite (dans le cas de l'équivalent du code machine d'un "goto" - tel est utilisé pour les boucles), et s'il devine mal, il doit faire face à cette; jetez l'instruction récupérée et récupérez la suivante en perdant un cycle.
La page Wikipédia sur le pipelining d'instructions montre un exemple de pipelining de puce RISC en 5 étapes - récupération des instructions, décodage des instructions, exécution, accès à la mémoire et réécriture. Ainsi, vous pouvez avoir 5 instructions à un certain stade d'exécution, qui se chevauchent. Jusqu'à la phase de "réécriture", les instructions n'ont aucun effet réel. Vous pouvez considérer cela comme une chaîne de montage - il faut 7 minutes pour assembler un widget, mais il peut être décomposé en 5 étapes, la plus longue étape prenant 2 minutes. Une fois toutes les deux minutes, chaque widget partiellement terminé est déplacé par la chaîne de montage vers la station suivante. Vous obtenez un widget toutes les deux minutes - l '"horloge" ne peut que cocher aussi vite que l'étape la plus lente. Si vous poussez le widget plus rapidement, le "goulot d'étranglement" aura de plus en plus de widgets mis en file d'attente.
la source