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
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
ahhh...ich bin garnet drauf gekommen dass R24 und R25 zusammen ein wort sin ! Danke !
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.