Wenn ich die folgende Codezeile in einem Arduino-basierten Projekt habe:
__asm__("nop\n\t");
Wird dies genau den gleichen Effekt haben wie nop in PIC12F675? Spielt es eine Rolle, dass der betreffende PIC und der Arduino mit unterschiedlichen Geschwindigkeiten arbeiten können?
A NOP
dauert normalerweise 1 Anweisungszyklus . Der PIC12F675 scheint die Uhr für einen Befehlszyklus durch vier zu teilen:
„Ein Befehlszyklus besteht aus vier Oszillatorperioden; bei einer Oszillatorfrequenz von 4 MHz ergibt dies eine normale Befehlsausführungszeit von 1 s.“ (Datenblatt S. 71)
Ein 20-MHz-Takt ergibt also eine Verzögerung von 200 ns (4/20 MHz).
Der in Arduino OTOH verwendete AVR liefert 1 MIPS/MHz, sodass er bei einem Takt von 20 MHz höchstwahrscheinlich eine Verzögerung von 50 ns (1/20 MHz) ergibt.
Jeder Prozessor hat seinen eigenen Befehlssatz und damit seine eigene Assemblersprache. Tatsächlich kann es verschiedene Assembler für denselben Prozessor geben, jeder mit einer etwas anderen Syntax. Es ist der Assembler , der angibt, welche Namen Sie angeben müssen, um bestimmte Anweisungen anzuzeigen. Typischerweise verwenden Assembler die gleichen Namen für Anweisungen (sogenannte Befehls-Mnemonik ), die die Dokumentation für den Prozessor verwendet, aber das ist nicht immer der Fall. Sie fragen nach Anweisungen auf zwei verschiedenen Prozessoren mit unterschiedlichen Assemblern, daher können Sie im Allgemeinen keine Ähnlichkeit annehmen, nur weil die Namen gleich sind.
Im Laufe der Jahre haben sich jedoch einige gebräuchliche (allerdings nicht standardmäßige) Befehlsnamen herausgebildet. Ein solcher Name ist NOP, was sich auf No OPeration bezieht . Die meisten Prozessoren haben einen Befehl, der nichts tut, und die meisten Assembler nennen diesen Befehl NOP. Aber auch hier gibt es keine Garantie dafür, dass dies auf einen bestimmten Assembler zutrifft, also sollten Sie immer überprüfen, anstatt anzunehmen.
Ich kenne den AVR-Befehlssatz nicht und schon gar nicht, wie er von den Arduino-Tools dargestellt wird. Ich weiß daher nicht, was das Arduino NOP tut, auf das Sie sich beziehen. Wenn es tatsächlich nur einen Befehlszyklus dauert und nichts weiter tut, als der Name NOP vermuten lässt, dann ja, es hat den gleichen Effekt wie der NOP-Befehl des PIC 12F675 (eigentlich ein 14-Bit-Kerngerät). Auf den traditionellen PIC-Geräten mit 14-Bit-Kern nimmt NOP ein einzelnes Befehlswort und wird in einem einzelnen Befehlszyklus ausgeführt.
NOPs werden normalerweise verwendet, um kurze Wartezeiten in Code einzufügen, z. B. das Warten auf eine Mikrosekunde, bis sich eine Zeile beruhigt hat. Übrigens, wenn Sie auf diesem PIC 2 Anweisungszyklen verschwenden möchten, können Sie dies mit der einzelnen Anweisung "GOTO $ + 1" tun, mit ein paar Einschränkungen, auf die es sich nicht lohnt, hier einzugehen.
ElectroNoob
ElectroNoob