avr geschwindigkeit-performance

(Firma: siemens) #813465
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
#813476
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
#813488
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.
Gast #813501
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).
Gast #813609
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.
#813625
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.

...

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