Hi guys,
First of all, I'm using a LM3S6950 Arm Cortex M3 microcontroller with Keil MDK 3.70. I'm programming in C, Thumb Mode.
For converting low endianess to big endianess I want to use the rev and rev16 instruction.
32 Bit swaps can be done with the build in __rev() inline C function (http://www.keil.com/support/man/docs/armccref/armccref_cjaeegce.htm)
How can I do this with the 16 bit instruction since inline assembler isn't supported in thumb mode?
Thanks for your replies br Robert
Parentheses around "a" is only needed if you make a #define of the expression.
Remember that the ARM is a 32-bit processor. Even if variable a is 16-bit large, the compiler will upgrade your expression to a 32-bit values, so if b is 32-bit and you try to reverse 0x8765, you will not get 0x6587 but 0x876587 if you don't do the bit-and.
And if a happens to be signed, life will be extra fun. With the & operations, you would still get the correct result, but without them, you would get 0xffffff87 because the upgrade from 16-bit to 32-bit will be with sign-extend.