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