Forum: Mikrocontroller und Digitale Elektronik Schleifenlänge


von Axos (Gast)


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

von dave (Gast)


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

von Axos (Gast)


Lesenswert?

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

von dave (Gast)


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

von Axos (Gast)


Lesenswert?

des werd ich jetzt anpassen. eigentlich wollte ich 1e sekunde ;)

MfG Axos

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.