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
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
Alexander B. schrieb: > Cool währ ja noch, wenn man die 32Bit multiplikation und Division > irgendwie reinpacken könnt. Beitrag "Re: DIVISION 32 BIT / 32BIT Beispiel (Assembler) ATmega8" http://www.mikrocontroller.net/attachment/16261/UDIV32F.ASM http://www.mikrocontroller.net/attachment/16262/umul32.asm Peter
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
ääää sory, ich hab mich oben verschrieben, ich meinte 600 Cycles.
Hi Bei ATMegas mit Hardware-Multiplizierer reichen 80 Takte. MfG Spess
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.