> -----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

Reply via email to