mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Programm verstehen


Autor: Kapitän Nuss (Gast)
Datum:

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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Kapitän Nuss schrieb:
> Hallo,
> ich untersuche gerade ein fremdes Programm in Assembler für den ATmega8:
>
> myloop:   nop
>           rjmp  myloop
> 
> 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Qibono (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In dem NOP sehe ich auch keinen Sinn.

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

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.