Anzahl Zyklen für icall und ret bei ATMEGA1284P

OP #3690217
Lesenswert?

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
Gast #3690328
Lesenswert?

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.
OP #3690547
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren