Hallo, ich habe eine Frage zu den Anzahl Zyklen die ein "icall" und ein "ret" auf dem ATMega1284P benötigen. Ja man kann die Datenblätter konsultieren und genau darum bin ich hier. Im ATMega124p Manual steht icall braucht 4 und ret braucht 5 cyclen. Aber im allgemeinen Instruction Set Manual steht bei AVRs mit 16-bit PC (program counter) braucht icall 3 und ret 4 und bei 22-bit PC braucht icall 4 und ret 5 cyclen. Aber ein ATMega hat doch einen 16-bit PC (Manual Kapitel 6.2). Wie viele Zyklen brauchen jetzt diese Instruktionen wirklich? Gruss Peter
Peter Schranz schrieb: > Wie viele Zyklen brauchen jetzt diese Instruktionen wirklich? Da würde ich mich auf die normative Kraft des Faktischen verlassen und einfach mal messen.
Peter Schranz schrieb: > ich habe eine Frage zu den Anzahl Zyklen die ein "icall" und ein "ret" > auf dem ATMega1284P benötigen. Ja man kann die Datenblätter konsultieren > und genau darum bin ich hier. Im ATMega124p Manual Du meinst sicher 1284P. Wohl ein Tippfehler. > steht icall braucht 4 > und ret braucht 5 cyclen. Das ist tatsächlich eine falsche Angabe im Datenblatt. Auch die zu rcall ist übrigens falsch. > Aber im allgemeinen Instruction Set Manual > steht bei AVRs mit 16-bit PC (program counter) braucht icall 3 und ret 4 > und bei 22-bit PC braucht icall 4 und ret 5 cyclen. Und das ist auch korrekt so. > Aber ein ATMega hat > doch einen 16-bit PC Nicht jeder. Nur die meisten. Der 1284P gehört aber definitiv zu diesen. Aber mal abseits vom Thema: du hast mir echt den Tag gerettet. Endlich mal wieder jemand im Forum, der 1) noch Datenblätter liest, 2) sich für Taktzyklen interessiert und 3) obendrein selbstständig denken kann und nichtmal Datenblättern vorbehaltlos vertraut, sondern in der Lage ist, selbstständig offensichtliche Diskrepanzen zu entdecken... Bravo, weiter so.
Danke für eure Antworten, ja sicher interessiere ich mich für Zyklen. Diesmal geht es um die Performance eines Emulators und dort wollte ich abschätzen welche meiner beiden Ideen weniger Zyklen braucht. Wenn das Instruction Manual recht hat (und es macht vor allem auch mehr Sinn), dann ist die Lösung mit icall und ret schneller als die andere. Das hat dann auch zur Folge, dass es übersichtlicher wird. Schlägt also 2 Fliegen mit einer Klatsche (noch nicht das tapfere Schneiderlein aber man soll bescheiden beginnen). Aber ich werde sicher mal ein Test Progrämmchen machen. Ich dachte an so etwas, den Timer 2 lasse ich einfach mit dem CPU Takt laufen.
1 | ldi zl, low(testret) |
2 | ldi zh, high(testret) |
3 | eor r0, r0 |
4 | out TCNT2, r0 ; damit ich keine Überlauf berücksichtigen muss |
5 | in r2, TCNT2 |
6 | icall |
7 | in r3, TCNT2 |
8 | in r4, TCNT2 |
9 | in r5, TCNT2 |
10 | sub r3, r2 |
11 | sub r5, r4 |
12 | sub r3, r5 ; jetzt sollte in R3 die Anzahl Zyklen die icall+ret brauchen stehen |
13 | |
14 | |
15 | testret: |
16 | ret |
nur noch den Wert von r3 ausgeben und schon weiss ich es, zumindest wenn 7 herauskommt ist alles klar. Peter P.S. ja natürlich ich meinte den ATMega1248P
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.