mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schleifenlänge


Autor: Axos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe in GCC eine pauseschleife für mianen AVR Geschreiben.
um dann zu erfahren wie lange es dauert bis die schleife durchlaufen
ist habe ich den code in das AVRStudio (deswegen nicht ins gcc forum)
Geladen und folgenden code herausgesucht:

+00000047:   E487 LDI  R24,0x47    Load immediate
+00000048:   E09D LDI  R25,0x0D    Load immediate
+00000049:   0000 NOP              No operation
+0000004A:   9701 SBIW R24,0x01    Subtract immediate from word
+0000004B:   FF97 SBRS R25,7       Skip if bit in register set
+0000004C:   CFFC RJMP PC-0x0003   Relative jump
+0000004D:   9508 RET              Subroutine return


dann hab ich auf +00000048 und +0000004D einen breakpoint gesetzt und
die den zähler nach erreichen von +00000048 auf 0 gesetzt. als dann die
schleife durchlaufen was hab ich am 204000 abgelesen und desshalb bei
1Mhz auch 204000 us. nun hab ich mir mal angeschaut wie lange es dauert
is die schleifen 1xdurchlaufen ist (von +00000049 bis +00000049) das
ergab 6 zyklen. Dann hab ich mit desen zahlen ausgerechnet wie lange
die schleife dauern müsste ( 0x47  0x0D  0x06 )= 5538 Zyklen und das
wären aber 5538 us dauern. was hab ich falsch gemacht. Rechenfehler
oder was ?

Schonmal danke für alle antworten !
MFG Axos

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau dir den code mal genau an....

er läd den wert 0xD47 (3399) ins Doppelregister..
jetzt zieht er in jeder schleife eins (0x01) von diesen D47 ab... dazu
braucht er dann ja 3399 (dann isser bei 0x0000) jetzt schlagen wir ins
negative um und fangen bei 11111111 11111111 an... blöd... jetzt ist
nämlich bit 15 (oder bit 7 vom msb) gesetzt und er muss aus der
schleife springen ==> schluss
rechner raus...
3399 * 6
+ 2 + 4
==> 20400 (wer hätts gedacht...)
==> 20400 * 10µs/takt ==> 204.000 µs

==> gute nacht
==> dave

Autor: Axos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhh...ich bin garnet drauf gekommen dass R24 und R25 zusammen ein wort
sin !
Danke !

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oioioi
einen fehler hab ich aber noch drin.. ein takt ist wirklich 1µs...
f***
hatte so gut gepasst...

wie lang sollte die schleife werden? 20.400µs oder 204.000µs?

dave

Autor: Axos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
des werd ich jetzt anpassen. eigentlich wollte ich 1e sekunde ;)

MfG Axos

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.