Hallo! Ich hätte mal eine Frage: Wie schnell schafft ein AVR (mit gcc programmiert) die Bitshiftoperation << bzw. >>?
irgendwas zwischen 0 und unendlich. 0 Taktzyklen wenn der Compiler das statisch ausrechnen kann und einfach nur eine Konstante einsetzt, unendlich bei einem fehlerhaft überladenen operator... Dazwischen gibts viele Sonderfälle, z.B. beim shiften eines 32Bit wertes um 8 bits kann der Compiler einfach die Register "umbenennen"... Wenns auf Taktzyklen genauen code ankommt, in Assembler programmieren, sonst klappts bei der nächsten GCC version mit geändertem Optimierer eh nichtmehr. /Ernst
Die Frage war offensichtlich falsch. Die korrekte Frage war : Wie schnell geht ein bitshift in ASM. => Antwort 1 Zyklus fuer eine position.
>Wie schnell schafft ein AVR (mit gcc programmiert) die Bitshiftoperation > << bzw. >>? Und wie ist es mit unsigned long ? sector = sector << 9;
Unsigned 32 bit shift 9 bedeutet 1 byte nullen, 3 byte umkopieren und jeweils je um eins schieben.
>Unsigned 32 bit shift 9 bedeutet 1 byte nullen, 3 byte umkopieren und >jeweils je um eins schieben. Völlig korrekt Seph. Problematisch wirds wenn statt einer konstanten 9 eine Variable mit Wert 9 verwendet wird. Dann kann der Compiler nix mehr optimieren. Dann wird wirklich 9 mal über 4 Bytes geschoben. Wie lange ein Shifting dauert hängt extrem vom Quellcode ab.
ok... nehmen wir mal an: value, n sind uint8 value = value << 4; sowie value = value << n; mit n nicht zum Kompilierzeitpunkt bekannt
Das erste sollte (deshalb kann man sich die .lss-Files anschauen) zu swap value andi value, 0xF0 werden, d.h. zwei takte das andere wird zu einer schleife, à la (vorsicht, pseudocode) shift: lsl value dec n brne shift Also mindestens 3 Takte, ABER n muss vorher noch auf 0 überprüft werden, also nochmal + 2 (oder 3 ?) Takte. Maximal (sinnvoll) wäre 4*7, (möglich) wäre 4*255 - das wäre aber schon ein Programmfehler - oder man muss auf n <= 7 überprüfen (wieder 2 bis 3 Befehle/Takte). Also schnapp dir deinen Compiler, dein passendes AVR-Datasheet und das "AVR Instruction Set" (noch ein PDF von Atmel) und find's selber raus ;) hth. Jörg
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.