On Tue, Apr 06, 2004 at 11:33:28AM -0500, Sergei Sharonov wrote: > volatile short *pbuf, *plast;
> pbuf = buf; > plast = buf + 10; > while(pbuf < plast); This compiles to 1494: 82 41 26 02 mov r1, &0x0226 ; 1498: 0e 41 mov r1, r14 ; 149a: 3e 50 14 00 add #20, r14 ;#0x0014 149e: 82 4e 28 02 mov r14, &0x0228 ; 14a2: 0f 41 mov r1, r15 ; 14a4: 0f 9e cmp r14, r15 ; 14a6: fe 2b jnc $-2 ;abs 0x14a4 It does update pbuf and plast, but then use the values hold in the registers to do the while loop - what is obviously wrong. When you change plast in a int.routine the while loop will never get any notice of this. Sergei was right. A little bit to much optimisation. ;-) Matthias