hm...
the code seems to be fine to me...
again:
what do you lose in there?

~d

On Wednesday 18 May 2005 14:18, Garst R. Reese wrote:
> Hi Thln, I'm no expert, but the most common reason for this sort of
> thing is gcc optimization, and the most common cure is to declare the
> index volatile, so you might try declaring i volatile.
>
> Hope it helps,
> Garst
>
> thln wrote:
> > Hi,
> >
> >
> > Thanks, Chris Liechti, for your help about _Re: Help about sizeof(
> > struct ...) MSP430-GCC_  (2005-04-26 16:46)
> >
> > So, if i write the fowling function (Swap_TAB_UART), the result is not
> > good.
> > the function lose len, ix values.
> >
> > It seems that the C compiler overwrites registers !!!
> >
> >
> >
> > Kind Regards, Thln!
> >
> >
> >
> > void Swap_TAB_UART(unsigned char ix, unsigned char len)
> > {
> > unsigned char i, tmp, l;
> >
> > l = len/2;
> > i = 0;
> > do
> >   {
> >   tmp = TAB_UART[ix+i];
> >   TAB_UART[ix+i] = TAB_UART[ix+len-i-1];
> >   TAB_UART[ix+len-i-1] = tmp;
> >   i++;
> >   } while (i<l);
> > }
> >
> > void main(void)
> > {
> >
> >
> > TAB_UART[15] = 0xC1;
> > TAB_UART[16] = 0x20;
> > TAB_UART[17] = 0x00;
> > TAB_UART[18] = 0x00;
> >
> >  Swap_TAB_UART(15, 4);
> > }
> >
> >
> >
> >
> >
> >
> >
> > void Swap_TAB_UART(unsigned char ix, unsigned char len)
> > {
> >     cd10: 0b 12        push r11  ;
> >     cd12: 0a 12        push r10  ;
> >     cd14: 09 12        push r9  ;
> >     cd16: 08 12        push r8  ;
> >     cd18: 04 12        push r4  ;
> >     cd1a: 4d 4f        mov.b r15, r13 ; R13 = ix
> >     cd1c: 4f 4e        mov.b r14, r15 ; R15 = len
> > unsigned char i, tmp, l;
> >
> > l = len/2;
> >     cd1e: 49 4e        mov.b r14, r9 ;
> >     cd20: 12 c3        clrc
> >     cd22: 49 10        rrc.b r9  ;    R9= len/2
> > i = 0;
> >     cd24: 4c 43        clr.b r12  ;    R12=i
> >     cd26: 4e 4d        mov.b r13, r14 ;
> >     cd28: 7f f3        and.b #-1, r15 ;r3 As==11
> > do
> >     cd2a: 38 40 20 02  mov #544, r8 ;#0x0220
> >     cd2e: 0a 4e        mov r14, r10 ;
> >     cd30: 0a 58        add r8, r10 ;   R10=ix+220
> >     cd32: 0b 4e        mov r14, r11 ;
> >     cd34: 0b 5f        add r15, r11 ; R11 = ix+len
> >   {
> >   tmp = TAB_UART[ix+i];
> >     cd36: 4f 4c        mov.b r12, r15 ; len is lost !
> >     cd38: 0e 4a        mov r10, r14 ;   ix is lost !
> >     cd3a: 0e 5f        add r15, r14 ;
> >     cd3c: 6d 4e        mov.b @r14, r13 ; ix is lost !
> >   TAB_UART[ix+i] = TAB_UART[ix+len-i-1];
> >     cd3e: 04 4b        mov r11, r4 ;
> >     cd40: 04 8f        sub r15, r4 ;
> >     cd42: 0f 44        mov r4, r15 ;
> >     cd44: 0f 58        add r8, r15 ;
> >     cd46: de 4f ff ff  mov.b -1(r15),0(r14) ;
> >     cd4a: 00 00
> >   TAB_UART[ix+len-i-1] = tmp;
> >     cd4c: cf 4d ff ff  mov.b r13, -1(r15) ;
> >   i++;
> >     cd50: 5c 53        inc.b r12  ;
> >   } while (i<l);
> >     cd52: 4c 99        cmp.b r9, r12 ;
> >     cd54: f0 2b        jnc $-30      ;abs 0xcd36
> > }
> >     cd56: 34 41        pop r4  ;
> >     cd58: 38 41        pop r8  ;
> >     cd5a: 39 41        pop r9  ;
> >     cd5c: 3a 41        pop r10  ;
> >     cd5e: 3b 41        pop r11  ;
> >     cd60: 30 41        ret
>
> -------------------------------------------------------
> This SF.Net email is sponsored by Oracle Space Sweepstakes
> Want to be the first software developer in space?
> Enter now for the Oracle Space Sweepstakes!
> http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to