avr geschwindigkeit-performance

OP (Firma: siemens) #813465
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
@ 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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.