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
@ 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
Es gibt ein AVR Instruction manual. Dort kann man die einfachen dinge nachschauen. Die komplexeren kann man mit dem simulator nachvollziehen.
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.
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
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).
ok. was mir noch fehlt ist die speichergrösse die obengenannte befehle belegen. danke.
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.
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. ...
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.