[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [avr-gcc-list] Gcc bug??
From: |
Brian Cuthie |
Subject: |
RE: [avr-gcc-list] Gcc bug?? |
Date: |
Wed, 3 Mar 2004 08:20:45 -0500 |
I'll do some tests and let you know. I know I did forget to add volatile to
at least one variable that I'm using in my interrupt handler, and I fixed
this already. Since I don't recall which one I'll need to explicitly test
this theory. I'll be a little surprised (although happy) if this turns out
the be the cause. It's not quite the code I'd expect the compiler to emit,
even without the volatile keyword. I mean, 0 is still 0.
Thanks
-brian
> -----Original Message-----
> From: Peter Hierholzer [mailto:address@hidden
> Sent: Wednesday, March 03, 2004 5:52 AM
> To: address@hidden
> Cc: address@hidden
> Subject: AW: [avr-gcc-list] Gcc bug??
>
> > I'm having some problems with an app that uses AvrX and gcc
> (v. 3.3.1)
> > on an ATmega16. In the interrupt routine for the TWI I
> write a static
> > with a code that indicates its current state. In an effort
> to debug a
> > different problem I compiled the code without any optimization.
> >
> > While I did discover the original problem I had been hunting, I
> > started to see some very unreliable behavior with the TWI.
> After some
> > investigation I determined that the state variable
> (mentioned above)
> > was getting written with an unreasonable value (not a valid state).
> > The correct state value that should have been written into the
> > variable is "0". Further experiments revealed that memory
> corruption
> > (at least directly into the variable's memory location) was not the
> > problem.
> >
> > What I then determined is that the "0" register (r1) contained the
> > value 8!
> > This, not coincidentally (and looking at the disassembled code) is
> > exactly the value that's being incorrectly written into the
> static state variable.
> > Interestingly, turning on any level of optimization seems
> to fix it,
> > at least as observed by the TWI port handler not hanging.
> >
> > I was wondering if anyone else has seen anything like this,
> or has any
> > advice or suggestions.
> >
> > Thanks
> >
> > -brian
>
>
> Hi Brian,
>
> Did you declare the state variable as volatile?
> If you access a variable in your normal program AND in the
> interrupt routine you must declare it as volatile. Otherwise
> the compiler is not aware that the variable is modified in
> the interrupt routine and generates wrong code.
>
> Peter
>
>
_______________________________________________
avr-gcc-list mailing list
address@hidden
http://www.avr1.org/mailman/listinfo/avr-gcc-list
- [avr-gcc-list] Gcc bug??, Brian Cuthie, 2004/03/02
- Re: [avr-gcc-list] Gcc bug??, Klaus Rudolph, 2004/03/03
- AW: [avr-gcc-list] Gcc bug??, Peter Hierholzer, 2004/03/03
- Re: [avr-gcc-list] Gcc bug??, Kang Tin LAI, 2004/03/03
- [avr-gcc-list] gcc binary, cswiger, 2004/03/03
- Re: [avr-gcc-list] gcc binary, Douglas Dotson, 2004/03/03
- Re: [avr-gcc-list] gcc binary, E. Weddington, 2004/03/03
- Re: [avr-gcc-list] gcc binary, cswiger, 2004/03/03
- Re: [avr-gcc-list] gcc binary, Joerg Wunsch, 2004/03/03
- Re: [avr-gcc-list] gcc binary, E. Weddington, 2004/03/03
- Re: [avr-gcc-list] gcc binary, Douglas Dotson, 2004/03/03