Schleifenlänge

Gast #131344
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
Gast #131345
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
Gast #131347
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.