Forum: Projekte & Code AVR 32Bit Makro sammlung für Assembler


von Alexander B. (ababab)


Angehängte Dateien:

Lesenswert?

Ich hab mir gedacht diese Makrosammlung könnte auch für andere Leute 
interesant und nützlich sein.

Die datei mit den Makros sollte im anhang sein.

Fals ihr Fehler findet bitte sagen, der code sollte aber eigendlich 
fehlerfrei sein. Aber eine 100%tige Sicherheit gibt es ja nie :D

Cool währ ja noch, wenn man die 32Bit multiplikation und Division
irgendwie reinpacken könnt.
Vieleicht mach ich das noch.

mfg Alex

von spess53 (Gast)


Lesenswert?

Hi

>Fals ihr Fehler findet bitte sagen, der code sollte aber eigendlich
>fehlerfrei sein.

Ist er nicht. Zumindest die Makros für 'neg' funktionieren so nicht. Um 
eine 32Bit-Zahl zu negieren ist folgender Code notwendig:
1
neg32:                com r16
2
                      com r17
3
                      com r18
4
                      com r19
5
                      subi r16,Low(-1)
6
                      sbci r17,byte2(-1)
7
                      sbci r18,byte3(-1)
8
                      sbci r19,byte4(-1)

>Cool währ ja noch, wenn man die 32Bit multiplikation und Division
>irgendwie reinpacken könnt.

Aber nicht als Makro! Ansonsten sieh dir diese App-Notes an:

AVR200: Multiply and Divide Routines
AVR201: Using the 8-bit AVR Hardware Multiplier
AVR202: 16-Bit Arithmetics on tinyAVR and megaAVR devices

MfG Spess

von Peter D. (peda)


Lesenswert?


von Alexander B. (Gast)


Lesenswert?

Hi Leute :-)

Ich hab mir das Dividieren und Multiplizieren mal angesehen und 
verstanden.
Ist eigendlich recht einfach, braucht aber einiges an rechenzeit :)
Das Dividieren braucht so um die 300 Cycles, das Multiplizieren ein
bischen weniger. Beim Multiplizieren hatt man hald das problem das wenn 
man
zwei 32bit zahlen Multipliziert, die höchste zahl die entstehen kann 
eine
64bit zahl ist.


@spess53: Danke für die korektur.
          Du hast reht, als makro ist das Dividieren und Multiplizieren
          nicht gut zu implementieren.

@Peter Dannegger: Danke für die Links.

mfg Alex

von Alexander B. (Gast)


Lesenswert?

ääää sory, ich hab mich oben verschrieben, ich meinte 600 Cycles.

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Bei ATMegas mit Hardware-Multiplizierer reichen 80 Takte.

MfG Spess

von Alexander B. (Gast)


Lesenswert?

Hi Leute

Danke spess53 für dieses Beispiel. Diese Art zu Multiplizieren hab
ich noch garnicht gekannt. Ich hatte ganz übersehen das die beiden MCU's
(ATmega16 und ATmega32) einen MUL befehl haben :-)

mfg Alex

von Spess53 (Gast)


Lesenswert?

Hi

>Diese Art zu Multiplizieren hab ich noch garnicht gekannt.

Sieh die einfach mal die App-Notes von Atmel an. Das Ganze beruht auf:

AVR201: Using the 8-bit AVR Hardware Multiplier

Dann werden auch die Kommentare verständlicher.

MfG Spess

von Alexander B. (Gast)


Lesenswert?

Hi

@Spess53:  Danke werd ich machen :-)

mfg Alex

von Bernhard S. (bernhard)


Lesenswert?

hier haben wir auch noch einiges zusammengetragen:

Beitrag "DIVISION 32 BIT / 32BIT Beispiel (Assembler) ATmega8"

Bernhard

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.