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?
|
Forum: Mikrocontroller und Digitale Elektronik Assembler Programm verstehenHallo, ich untersuche gerade ein fremdes Programm in Assembler für den ATmega8:
Hat der nop Befehl eine Bedeutung für die Interruptlatenzzeit, oder hätte man den auch weglassen können? Hallo, Kapitän Nuss schrieb: > Hallo, > ich untersuche gerade ein fremdes Programm in Assembler für den ATmega8: >
> 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 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. 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 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.
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. 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.
|
|