> -----Original Message----- > From: Ned Konz [mailto:[EMAIL PROTECTED] > Sent: Monday, 8 January 2007 5:54 PM > To: Ron > Cc: [email protected] > Subject: Re: [avr-libc-dev] Volatile not working? > > > Ron wrote: > > Hi Folks. I would have thought that with -Os the code below should > > work. > > > > static volatile char* Ptr; > > . > > . > > static Send(char* p) > > { > > if (p) > > { > > while (Ptr != NULL) {;} > > Ptr = p; > > UDR1 = *Ptr++; > > } > > } > > . > > . > > SIGNAL(SIG_UART1_TRANS) > > { > > if (*Ptr == '\0') > > Ptr = NULL; > > else > > UDR1 = *Ptr++; > > } > > > > However, the while loop becomes: > > > > LDS R24,0x018D > > LDS R25,0x018E > > SBIW R24,0x00 > > BRNE PC-0x01 > > > > The code is as expected with -O0. Version is 3.4.6. Something I'm > > missing? > > Probably. > > You didn't declare Ptr to be volatile. > > Instead you declared Ptr to *point to* a volatile char. > > So in the while loop (while you're comparing Ptr to NULL) there's no > reason to re-read Ptr because it's not volatile. > > -- > Ned Konz > [EMAIL PROTECTED] > http://bike-nomad.com >
Yep, that was it. Thanks. Ron _______________________________________________ AVR-libc-dev mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/avr-libc-dev
