Warum gibt es eine Uhr in meinem Arduino?

9

Natürlich weiß ich, dass es nützlich ist, die Zeit einer Verzögerung zu kontrollieren, aber eine andere Verwendung?

Mit einer 16-MHz-Uhr dauert jede Zeile meines Programms 1/16000000 Sekunden, oder?

Selbst eine sehr sehr große Linie wird nur 1/16000000 Sekunden dauern?

Mit einem 8-MHz-Takt benötigt jede Leitung das Doppelte der Zeit, oder? Also wird die ganze "Hauptschleife" auch die doppelte Zeit brauchen, oder?

n0tis
quelle
3
Sie verwechseln zwischen C-Anweisungen und Maschinenanweisungen (Montage). Aber selbst wenn Sie direkt in Assembly geschrieben haben, können Sie dies gut gebrauchen, da das Programm NICHT linear ist. Ich meine, Interrupts unterbrechen, wie der Name schon sagt, den normalen Codefluss, indem sie eine andere Anweisung ausführen und dann fortfahren. Vielleicht ist es zwischen einer Zeile und der nächsten gezwungen, den ISR auszuführen, der sehr lang sein kann
frarugi87
2
Wenn Sie Ihren Chip mit acht Millihertz takten, wird selbst die einfachste Codezeile ewig dauern. Ich schlage vor, Sie verwenden eine Uhr im Mega- Hertz-Bereich (MHz).
Edgar Bonet
Die Anzahl der Zyklen, die zur Ausführung jeder Maschinenanweisung erforderlich sind, ist im Handbuch des Befehlssatzes angegeben .
Edgar Bonet
Verdammt, ich sollte schlafen gehen;), bearbeitet danke
n0tis

Antworten:

13

Warum gibt es eine Uhr in meinem Arduino?

Denn so funktionieren Computer, Mikrocontroller usw.

Mit einer 16-MHz-Uhr dauert jede Zeile meines Programms 1/16000000 Sekunden, oder?

Nein.

Selbst eine sehr sehr große Linie wird nur 1/16000000 Sekunden dauern?

Nein.

Die Uhr definiert, mit welcher Geschwindigkeit die Maschinencode-Anweisungen aus dem Speicher abgerufen und ausgeführt werden. Die meisten Anweisungen benötigen einen Taktzyklus, einige jedoch mehr.

Eine Zeile C-Code kann in eine beliebige Anzahl von Montageanweisungen kompiliert werden, die dann in Maschinencode (Rohzahlen) umgewandelt werden. Das kann von 1 Montageanleitung bis zu Tausenden von Montageanweisungen reichen, je nachdem, was die Linie tut.

Mit einer 8-MHz-Uhr benötigt jede Leitung das Doppelte der Zeit, oder? Also wird die ganze "Hauptschleife" auch die doppelte Zeit brauchen, oder?

Jede Operation im Chip wird von der Uhr gesteuert. Wenn der Takt halb so schnell ist wie der Chip, läuft jeder Vorgang doppelt so lange, ja.

Majenko
quelle
auch unterbricht.
NJZK2
1
Kleiner Nitpick: Sollte "... irgendwo von 0 Montageanweisungen ..." sein, auch ohne Optimierer, aber noch mehr nach der Optimierung.
Peter
2
Verwirre den armen Jungen nicht. Er hat es so schwer genug.
Majenko
@Majenko: Die Verwirrung ist eine Notwendigkeit. Es ist schwer.
Intelfx
@intelfx "IT"? Dies ist Programmierung, nicht IT ....
BalinKingOfMoria CMs wieder herstellen
10

Nicht beantwortet in @ Majenkos Beitrag: Ja, mit einem 8-MHz-Takt benötigt jede Leitung das Doppelte der Zeit. Es sei denn, die Leitung wartet auf etwas, das nicht taktgesteuert ist - z. B. einen externen Eingang.

Zusätzlich zur Antwort von @ Majenko verfügt eine CPU über eine Uhr, um sicherzustellen, dass die Anweisungen vollständig sind, bevor der nächste Schritt beginnt. Eine CPU besteht aus vielen Transistoren (ich habe eine Referenz gefunden, die angibt, dass der AtMega im Bereich von niedrigen Millionen liegt und eine Größenordnung gibt oder nimmt).

Während eines Zyklus fließt der Strom durch den Chip und schaltet die Transistoren ein / aus, wodurch mehr Transistoren auf der ganzen Linie ein- und ausgeschaltet werden. Währenddessen haben einige Teile des Chips einen "falschen" Wert - Sie können sich dies als die Hälfte der Berechnung vorstellen (Sie haben die Spalte "one" und die Spalte "10s" hinzugefügt und beginnen gleich mit der 100s Spalte). Sie möchten nicht, dass dies die Außenwelt beeinflusst, also werden (zum Beispiel) Ihre Ausgangspins verriegelt - auf dem Wert gehalten, den sie haben - bis der Befehl abgeschlossen ist. Wie lange es dauert, eine Anweisung auszuführen, ist unterschiedlich, aber der Hersteller erarbeitet unter den schlimmsten Umständen die langsamste Anweisung.

Für den AtMega (der Chip auf dem Arduino) hat Atmel (der den Chip entworfen hat) angegeben, dass dies 1 / 20.000.000 Sekunden sind - das sind 20 MHz.

Beachten Sie, dass nicht alle Mikroprozessoren alle ihre Befehle mit 1 Befehl pro Zyklus ausführen - einige Befehle können 1, 2 oder 10 Zyklen dauern. Pipelining macht die Sache noch komplizierter - ein Prozessor erledigt möglicherweise einen Teil der Arbeit (z. B. den nächsten Befehl abrufen) in einem Zyklus, führt ihn im nächsten aus - aber während er Befehl 1 ausführt, kann er auch den nächsten Befehl abrufen. Um dies zu tun, muss möglicherweise erraten werden, welche Anweisung als nächstes kommt (im Fall des Maschinencode-Äquivalents eines "goto" - dies wird für Schleifen verwendet), und wenn es falsch errät, muss es damit umgehen Das; Werfen Sie die abgerufene Anweisung weg und rufen Sie die nächste ab, wobei Sie einen Zyklus verlieren.

Die Wikipedia-Seite zum Anweisungs-Pipelining zeigt ein Beispiel für ein RISC-Chip-Pipelining in 5 Stufen - Befehlsabruf, Befehlsdecodierung, Ausführung, Speicherzugriff und Rückschreiben. Sie können also zu einem bestimmten Zeitpunkt der Ausführung 5 Anweisungen haben, die sich überlappen. Bis zur "Rückschreib" -Phase haben die Anweisungen keine wirkliche Wirkung. Sie können sich dies als Fließband vorstellen - das Zusammenstellen eines Widgets dauert 7 Minuten, kann jedoch in 5 Phasen unterteilt werden, wobei die längste Phase 2 Minuten dauert. Alle zwei Minuten wird jedes teilweise fertiggestellte Widget vom Fließband zur nächsten Station verschoben. Sie erhalten alle zwei Minuten ein Widget - Die "Uhr" kann nur so schnell ticken wie der langsamste Schritt. Wenn Sie das Widget schneller herausschieben, werden durch den "Engpass" immer mehr Widgets in die Warteschlange gestellt.

AMADANON Inc.
quelle
Der AVR hat eine sehr flache Pipeline: nur abrufen und ausführen. Dann dauern bedingte Sprünge entweder einen Zyklus (Sprung nicht ausgeführt) oder zwei Zyklen (Sprung ausgeführt).
Edgar Bonet
Zusätzliche Komplikation: Cache-Fehler.
Martín-Blas Pérez Pinilla
Es gibt viele Dinge, die ich nicht erwähnt habe: Cache (jeglicher Art), Multithreading, Multi-Core ... Ich bin wahrscheinlich bereits in meinem Beitrag auf zu viel Tiefe eingegangen.
AMADANON Inc.