Forum: Mikrocontroller und Digitale Elektronik avr geschwindigkeit-performance


von Daniel M. (Firma: siemens) (forwarder)


Lesenswert?

hallo
ich möchte aus kostengründen von wilke auf avr umsteigen. folgend ist es 
sehr von interesse wie schnell avr daten verarbeitet. hier sind meine 
fragen:

-programmiersprache c
-programmierumgebung winavr
-avr mit 32k oder 64k flash

wieviele takte und bytes(compiliert) werden für folgende instruktionen 
benötigt:

1. 32bit integer division
2. 32bit modulo berechnung
3. vergleich von 2 32bit integer(in einem c befehl)
4. vergleich von 6 32bit integer(in einem c befehl)
5. i/o schreibzugriff(wieviel i/o zugriffe bei z.b 10mhz)
6. i/o lesezugriff(wieviel i/o zugriffe bei z.b 10mhz)

7. wieviel speicher belegen die standart library so wie i/o, math usw.
8. wie schnell(sekunden) braucht es bis code(z.b. 20kb) in controler 
geladen ist

vielen dank für eure infos um voraus

von Falk B. (falk)


Lesenswert?

@ Daniel Müller (Firma siemens) (forwarder)

>1. 32bit integer division
>2. 32bit modulo berechnung

Ist quasi das gleiche, weil die Funktion beides gleichzeizig als Ergbnis 
liefert. Wieviell Takte die braucht weiss ich jetzt nicht. Ich tippe mal 
auf um die 50.

>3. vergleich von 2 32bit integer(in einem c befehl)

Das sollte mit 4 ASM-Befehlen umsetzbar sein, die dauern dan 4 Takte.

>4. vergleich von 6 32bit integer(in einem c befehl)

dito.

>5. i/o schreibzugriff(wieviel i/o zugriffe bei z.b 10mhz)

10 Millionen.

>6. i/o lesezugriff(wieviel i/o zugriffe bei z.b 10mhz)

10 Millionen.

>7. wieviel speicher belegen die standart library so wie i/o, math usw.

Keine Ahnung.

>8. wie schnell(sekunden) braucht es bis code(z.b. 20kb) in controler
>geladen ist

Bei einem gescheiten Programmieradapter unter 5s schätze ich mal.

MfG
Falk

von 6641 (Gast)


Lesenswert?

Es gibt ein AVR Instruction manual. Dort kann man die einfachen dinge 
nachschauen. Die komplexeren kann man mit dem simulator nachvollziehen.

von Benedikt K. (benedikt)


Lesenswert?

Falk Brunner wrote:

>>1. 32bit integer division
>>2. 32bit modulo berechnung
>
> Ist quasi das gleiche, weil die Funktion beides gleichzeizig als Ergbnis
> liefert. Wieviell Takte die braucht weiss ich jetzt nicht. Ich tippe mal
> auf um die 50.

Definitiv mehr !
Überleg mal, 50 Takte, da hätte man pro Bit nichtmal 2 Takte, und man 
muss mindestens in jedem Takt 1x 32bit schieben, dann noch vergleichen 
usw.
Eine 32x32 Multiplikation braucht ja schon einige 100 Takte...



>7. wieviel speicher belegen die standart library so wie i/o, math usw.

Alles komplett: Ein paar kByte. math.h alleine braucht für einfache 
Additionen/Multiplikationen, int <--> float rund 2kByte.

von JÜrgen G. (Firma: 4CKnowLedge) (psicom) Benutzerseite


Lesenswert?

Falk Brunner wrote:

>>8. wie schnell(sekunden) braucht es bis code(z.b. 20kb) in controler
>>geladen ist
>
> Bei einem gescheiten Programmieradapter unter 5s schätze ich mal.

Weit darunter ^^

1s maximal

von Matthias (Gast)


Lesenswert?

Wenn Du die Controller im kommerziellen Umfeld einsetzen willst, dann
empfehle ich eine etwas ausführlichere Betrachtung, als die, wieviel 
Speicher od. wieviel Take was braucht!

Was soll die Anwendung später können? Wird viel 32- und 16-bit 
Arithmetik verwendet, dann würde ich einen STM32 empfehlen. Die 
Entwicklungsumgebung ist zwar relativ teuer (KEIL ~2000 Euro), aber 
dafür kann man die Taktfrequenz schön skalieren. Wenn man eine 
entsprechende Stückzahl abnimmt, sind die Teile nicht wesentlich teuerer 
als AVRs (für die 32 bit).

Wenn es mehr 8-bit Arithmetik ist, und sich nur selten eine 32-bit Zahl 
in den Cotroller verirrt, dann ist der AVR wohl die bessere Lösung.
Aber ich empfehle dann einen Compiler wie ICC-AVR oder IAR. Besonders 
wenn
man keine Controller mit viel Flash einbauen möchte. Hat man z.B. vor 
einen Tiny oder einen Controller mit <= 4k Flash einzusetzen, so rate 
ich zu IAR.

Hängt aber von der Komplexität des Programms ab. Der WIN-AVR hat leider 
den Nachteil, dass der generierte Code relativ groß ist im vergleich zu 
den beiden anderen. Ausserdem können sich da u.U. ein paar GCC Effekte 
bemerkbar machen (Neue Version von gcc -> Programm anpassen). Ist zwar 
nicht so häufig der Fall, aber bei einer gößeren Appplikation, wird eine 
Anpassung dann mühselig.

@Falk:
Die 4 Befehle bei dem 32-bit Vergleich setzen voraus, dass die Werte 
schon in Registern stehen. Da der AVR aber eine Load/Store Architektur 
hat, müssen diese erst aus dem RAM bzw. von memory mapped I/Os geladen 
erden. Dann kommen nochmal jeweils 2-3 Takte dazu (16-bit Adresse laden 
und Wert lesen).

von Daniel M. (Firma: siemens) (forwarder)


Lesenswert?

ok. was mir noch fehlt ist die speichergrösse die obengenannte befehle 
belegen.
danke.

von 6641 (Gast)


Lesenswert?

Na, schau dir doch mas das Instuction set an. Die meisten befehle 
benoetigen 2 Byte, wobei der Adresszaehler eh in Word laeuft. Ein Mega32 
kann demnach um die 16k Befehle. Einzelne, wie Jumps sind etwas laenger.

von Daniel M. (Firma: siemens) (forwarder)


Lesenswert?

ich nehme an dass du assembler meinst. und wie ist es mit c ?

von Hannes L. (hannes)


Lesenswert?

Daniel Müller wrote:
> ich nehme an dass du assembler meinst. und wie ist es mit c ?

Der AVR kann kein C. Wie groß der vom C-Compiler erzeugte ASM-Code (oder 
MC) wird, hängt stark vom verwendeten Compiler und Deinem 
Programmierstil ab. Wenn Du viel rechnen musst, dann lass es. Da sind 
vermutlich andere Controllerfamilien besser geeignet.

...

von Jemand (Gast)


Lesenswert?

>Definitiv mehr !
>Überleg mal, 50 Takte, da hätte man pro Bit nichtmal 2 Takte, und man
>muss mindestens in jedem Takt 1x 32bit schieben, dann noch vergleichen
>usw.
>Eine 32x32 Multiplikation braucht ja schon einige 100 Takte...

Mit dem Karatsuba-Algorithmus 
(http://de.wikipedia.org/wiki/Karatsuba-Algorithmus) und dem MULT-Befehl 
sollte es schneller gehen

von Thomas (Gast)


Lesenswert?

"Der AVR kann kein C"


Und Assembler auch nicht...

von Hannes L. (hannes)


Lesenswert?

Thomas wrote:
> "Der AVR kann kein C"
>
>
> Und Assembler auch nicht...

Aber Maschinencode (MC), und der ist 1 zu 1 in Assembler notierbar.

...

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.