|
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
[Prev in Thread] | Current Thread | [Next in Thread] |