Thanks, guys. I asked because I tried a code snippet, but was getting errors.
I found later that the errors came from my IDE's code analysis, not the compiler. The code works fine. Thumbs up for the assembly examples! Diogo On Wed, 2016-11-30 at 14:14 +0100, Georg-Johann Lay wrote: > On 30.11.2016 08:40, Diogo Martins Silva wrote: > > Hello all. > > > > The avr-gcc wiki (https://gcc.gnu.org/wiki/avr-gcc) lists 24 bits > > (u)ints as an extension since version 4.7. How do I use them? > > > > Thanks > > > > Diogo > > You can use it basically like any other integer type, for example: > > > __uint24 mul24 (unsigned char a, unsigned int b) > { > return (__uint24) a * b; > } > > __int24 get_val24 (const __flash __int24 vals[], unsigned char pos) > { > return vals[pos]; > } > > For a MCU with MUL, this gives > > mul24: > mul r24,r22 > movw r18,r0 > mul r24,r23 > add r19,r0 > mov r20,r1 > clr __zero_reg__ > adc r20,__zero_reg__ > mov r24,r20 > movw r22,r18 > ret > > get_val24: > ldi r18,lo8(3) > mul r22,r18 > add r24,r0 > adc r25,r1 > clr __zero_reg__ > movw r30,r24 > lpm r22,Z+ > lpm r23,Z+ > lpm r24,Z > ret > > When you are passing a 24-bit value to a variadic function like printf, > you have to cast it to (un)signed long by hand; avr-gcc does not > automatically promote such types to 32-bit types. printf et al. have no > format specifiers for 24-bit types. > > Johann > _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list