avr-libc-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-libc-dev] Volatile not working?


From: Ned Konz
Subject: Re: [avr-libc-dev] Volatile not working?
Date: Sun, 07 Jan 2007 22:54:05 -0800
User-agent: Thunderbird 1.5.0.9 (Macintosh/20061207)

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
address@hidden
http://bike-nomad.com




reply via email to

[Prev in Thread] Current Thread [Next in Thread]