[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] issues with struct and volatile
From: |
Pink Boy |
Subject: |
[avr-gcc-list] issues with struct and volatile |
Date: |
Thu, 23 Jul 2009 20:17:41 -0700 (PDT) |
Hi,
I recently run into an issue with a struct with some volatile members and
was wondering is this is a problem with me or gcc, ar avr-gcc.
I have a structure used to define a buffer for a serial port somewhat like
this.
struct
{
uint8_t *tx_head;
volatile uint8_t *tx_tail;
uint8_t tx_buffer[DBG_BUF_SZ];
/* blah blah */
uint8_t dbg_timer;
} dbg_serial_port;
In my main loop I have a code that waits to see if the buffer is full.
while(dbg_serial_port.tx_head == dbg_serial_port.txtail)
;
And of course with compiler flags set to optimize for size -Os it hangs
and waits forever.
The only way to get it to work is to declare the whole structure and
tx_tail as volatile. I'd be just annoyed, but if I do that I get a whole
bunch of compiler warnings on stuff like
uint8_t *temp = dbg_serial_port.tx_head;
I can fix those with a cast but doing that is like going after a fly
with a hammer.
Is this a bug with gcc's handling of volatile or just me?
PS: Using the WinAvr 20090313.
Matt
- [avr-gcc-list] Re: [avr-chat] Mega644 bit test problem, Robert von Knobloch, 2009/07/20
- [avr-gcc-list] issues with struct and volatile,
Pink Boy <=
- Re: [avr-gcc-list] issues with struct and volatile, John Myers, 2009/07/24
- Re: [avr-gcc-list] issues with struct and volatile, klaas, 2009/07/24
- Re: [avr-gcc-list] Re: issues with struct and volatile, Bob Paddock, 2009/07/24
- Re: [avr-gcc-list] Re: issues with struct and volatile, Stefan Ernst, 2009/07/24
- [avr-gcc-list] Re: issues with struct and volatile, David Brown, 2009/07/24
- [avr-gcc-list] Re: issues with struct and volatile, David Brown, 2009/07/24