Forum: Mikrocontroller und Digitale Elektronik Assembler Programm verstehen


von Kapitän Nuss (Gast)


Lesenswert?

Hallo,
ich untersuche gerade ein fremdes Programm in Assembler für den ATmega8:
1
myloop:   nop
2
          rjmp  myloop
Hat der nop Befehl eine Bedeutung für die Interruptlatenzzeit, oder 
hätte man den auch weglassen können?

von Michael U. (amiga)


Lesenswert?

Hallo,

Kapitän Nuss schrieb:
> Hallo,
> ich untersuche gerade ein fremdes Programm in Assembler für den ATmega8:
>
1
> myloop:   nop
2
>           rjmp  myloop
3
>
> Hat der nop Befehl eine Bedeutung für die Interruptlatenzzeit, oder
> hätte man den auch weglassen können?

Naja, er hat einen Einfluß, da nop nur einen Takt braucht, rjmp aber 2.

Das Problem ist jetzt: es ist kaum sinnvolle berechenbar (bei externen 
IRQs garnicht), bei welchem Befehl er auftritt. Es wird also manchmal 
einen und manchmal 2 Takte dauern.

Ohne den nop wären es immer 2 Takte, weil der Befehl, der zuende 
gebracht wird, eben immer ein rjmp wäre.

Gruß aus Berlin
Michael

von Stefan E. (sternst)


Lesenswert?

Michael U. schrieb:

> Ohne den nop wären es immer 2 Takte, weil der Befehl, der zuende
> gebracht wird, eben immer ein rjmp wäre.

Nee, auch dann nicht "immer 2 Takte", denn das Interrupt-Ereignis kann 
ja auch mitten im rjmp eintreten.

von spess53 (Gast)


Lesenswert?

Hi

>Nee, "immer" auch dann nicht, denn das Interrupt-Ereignis kann ja auch
>mitten im rjmp eintreten.

Aber ein Interrupt unterbricht keine laufenden Befehl.

MfG Spess

von Stefan E. (sternst)


Lesenswert?

spess53 schrieb:

> Aber ein Interrupt unterbricht keine laufenden Befehl.

Habe ich ja auch nicht behauptet. Aber bis zum Ende des Befehls sind es 
nicht immer 2 Takte, wenn es ein 2-Takt-Befehl ist.

von Qibono (Gast)


Lesenswert?

Wirklich Sinn macht das nicht. Es gibt aber Leute, die fürchten sich 
irgendwie vor Sprüngen auf sich selbst ("man kann ja nie wissen, ich 
schreib lieber 'mal nen NOP davor"). Um den mittleren Einfluss auf die 
Int-Latenz signifikant zu reduzieren, müsste man erheblich mehr NOPs 
verwenden. Da man aber so niemals die Worst Case Zeit reduziert, ist das 
eigentlich immer eine Lüge in die eigene Tasche. Wenn es wirklich auf 
minimale INT-Latenz ankommt (und es nur eine Int Quelle gibt), ist man 
mit Polling der Interruptquelle meist besser dran. Man spart sich so den 
eigentlichen Interrupt-Call und den Return.

von Hannes L. (hannes)


Lesenswert?

In dem NOP sehe ich auch keinen Sinn.

Bei mir steht am Ende der Mainloop (vor dem Rücksprung) fast immer ein 
SLEEP.

...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.