Gast
#1469
wie kann ich von einem Byte wie
unsigned char testbyte;
das Gigh und Low Nibble tauschen?
|
Anzeige
|
Nibbels tauschen in C
Gast
#1469
wie kann ich von einem Byte wie
unsigned char testbyte;
das Gigh und Low Nibble tauschen?
Gast
#1470
Z.B. so: #define HIGHNIBBLE(v) (char)(((v) & 0xF0) >> 4) #define LOWNIBBLE(v) (char)((v) & 0x0F) #define MAKEBYTE(l, h) (char)((l) | ((h) << 4)) char b = 0x23; b = MAKEBYTE(HIGHNIBBLE(b), LOWNIBBLE(b));
Gast
#1471
Hallo!
Das ganze würde einen unnötig langen Code erzeuen. In Assembler gibt es
einen einzigen Befehl zum Nibble-Tauschen. Ich kenne mich zwar in C
nicht besonders gut aus, aber ich glaube einmal gesehen zu haben, daß
Assembler-Befehle direkt auf folgende Weise aufgerufen wurden:
#asm("swap r16");
Damit würden die beiden Nibbles von Register 16 in einem Befehl und in
einem Takt vertauscht. Natürlich geht es nicht mehr so einfach, wenn das
Byte im S-RAM gespeichert ist.
Gruß
Jürgen
Gast
#1472
Wenn du den GCC benutzt wird kein overhead erzeugt. Der Compiler/Optimizer produziert hier tatsächlich das gewünschte 'swap' !!! Schau dir mal den Assemblerouput vom Compiler an. Tobias Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|