PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Berechnung der Geschwindigkeit des µC und Frequenz?



kautz
05.03.2005, 09:03
Wie berechne ich die Zeit für eine Rechenoperation, wenn ich die Frequenz gegeben habe?
Z.B. ein 8Mhz µC soll diese Schleife ausführen:for(i=0;i<=100;i++); .
Wie lange braucht er dazu?
8MHz sind ja 8*10^6 /s . Heißt das, dass er in 1s/(8*10^6) eine Berechnung/Schritt durchführt?

Gibt es unterschiedliche Zeiten für bestimmte Schritte?
Das er vielleicht für das Addieren von zwei Variablen länger braucht als eine Variable + eine Konstante.

PicNick
05.03.2005, 10:25
Für die Zeit sind die "Cycles" ausschlaggebend. je nach Befehl (siehe "Instruction set") braucht er einen oder mehrere.
Wenn du also so eine for-Schleife berechnen willst, mußt du die generierte Assemblerbefehle (*.lss) nachrechnen.
In einer uS macht er 8 Cycles, soweit hast Du mal recht.

binaer
05.03.2005, 10:50
http://www.avr-asm-tutorial.net/avr_de/beginner/index.html

Hier findest du, welche Befehle wieviele Cycles brauchen.
lg binaer

Arexx-Henk
05.03.2005, 11:25
Hallo kautz

gute frage, habs mahl ausgesucht, mochtes auch mahl verstehen

for(i=0;i<=100;i++);

compilieren und guck in die test.lst datei



// for(i=0;i<=100;i++); compiliert als:

ldi r24,lo8(0) //lade 0 in register 24
.L6 //sprung label
subi r24,lo8(-1) //substrahiere r24 mit -1 (selbe wie addierung mit +1)
cpi r24,lo8(100) //vergleich r24 mit 100
brio .L6 //spring zuruck nach L6 wenn niedriger

ldi r24,lo8(0) //1 clockcyclus
.L6 //0
subi r24,lo8(-1) //1 * 100 = 100 clockcyclus \
cpi r24,lo8(100) //1 * 100 = 100 clockcyclus |<--- wird ja 100 mahl durchlaufen
brio .L6 //1 * 100 = 100 clockcyclus /

zusammen sind 301 clockcycles


zusammen sind 301 clockcycles
Ein clockcycle by 8MHz is 1/8us
301 * 1/8 us = ongefahr 38us

ist ja blitzschnell

von diesen loops (for(i=0;i<=100;i++);) kan mann 26000 stuck hintereinander programmieren und dafur braucht die processor nur eine secunde (!) um die alle 26000 aus zu fuhren

wenn integer stat char benutzt wird mussen immmer 2 bytes addiert und verglichen werden und ich schatze dass wird ungefahr 4 bis 6 * 100 clockcycles extra daurn und machts mehr als zweimahl so langsam. (kanst du ja selbst ausprobiere/ausrechnen)

gruss

Henk