> This does not work if I use this code: > ------------------------------------------------------------------------------ > /* > endian.c > */ > #include <stdint.h> > > static inline uint16_t endian16(uint16_t v) > { > asm("swpb %0" : "+g" (v)); > return v; > } > > volatile uint16_t value; > int main() > { > value = 0x1122; > endian16(value); > > //At this point: value = 0x1122 !!!! > return (int)value; > }//main
> > And I compile using: > > msp430-gcc -g3 -mmcu=msp430x149 -o endian.msp endian.c -Wall -O2 > > The function 'endian16' (with or without __attribute__((const))) compile to > nothing!! Maybe a problem of mspgcc with inline assembler in static inline > functions? I work with msp430-gcc 3.2.3 compiled from CVS (2006-04-10). No, the problem is that you're not using the return value. When it's declared __attribute__((const)), you're promising that the return value is the only effect of calling the function, so GCC obviusly deletes it. Change that to value = endian16(value); and all will be well. Note that the use of "volatile" means that the output won't be terribly optimal.