Forum: Mikrocontroller und Digitale Elektronik Anzahl Zyklen für icall und ret bei ATMEGA1284P


von Peter S. (cbscpe)


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

von Praktiker (Gast)


Lesenswert?

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.

von c-hater (Gast)


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.

von Peter S. (cbscpe)


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

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.