avr-gcc-list
[Top][All Lists]
Advanced

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

Re: [avr-gcc-list] Accessing function and strings in flash in theATMega


From: jan
Subject: Re: [avr-gcc-list] Accessing function and strings in flash in theATMega 644
Date: Thu, 5 Feb 2009 10:08:20 +0100

The expression is probably not 'too complex for the compiler' but too
complex for the programmer.

Your intention was probably not
if (pgm_read_byte((PGM_P)(TESTIMAGE + (IMAGE_SIZE * projnum) + SIGNATURE) != 0))

but
if (pgm_read_byte((PGM_P)(TESTIMAGE + (IMAGE_SIZE * projnum) + SIGNATURE)) != 0)

My experience is that we are almost never as clever as we think we are.

/Janne


On Thu, 05 Feb 2009 09:45:36 +0100
Robert von Knobloch <address@hidden> wrote:

> Weddington, Eric wrote:
> >  
> >
> >   
> >> -----Original Message-----
> >> From: 
> >> address@hidden 
> >> [mailto:address@hidden
> >> org] On Behalf Of Robert von Knobloch
> >> Sent: Monday, February 02, 2009 8:49 AM
> >> To: address@hidden
> >> Subject: [avr-gcc-list] Accessing function and strings in 
> >> flash in theATMega 644
> >>
> >>     
> >
> >   
> >>  if (pgm_read_byte((PGM_P)(TESTIMAGE + (IMAGE_SIZE * projnum) +
> >> SIGNATURE) != 0))
> >>     
> > <snip> 
> >   
> >> Can anyone tell me a: why this does not work and/or what I am
> >> assuming that is wrong?
> >>     
> >
> > Remember that pgm_read_byte() is a *macro* and not a function. And
> > to top it off, that macro generates inline assembly. You have a
> > very complex expression in the parameter portion of the macro.
> >
> > I strongly suggest that you take out the expression and assign it
> > to another variable, and just use that variable in place of the
> > pgem_read_byte() paramater. As a precaution, take out the call to
> > pgm_read_byte() from the if statement.
> >
> > Like so:
> >
> > address = (TESTIMAGE + (IMAGE_SIZE * projnum) + SIGNATURE);
> > byte = pgm_read_byte(address);
> > if (byte != 0)
> > {
> > // code
> > }
> >
> > See if that helps.
> >
> > Eric Weddington
> >
> >
> >   
> Yes Eric, that produces quite sensible code that actually works.
> Thank you for the insight. Just two small questions:
> 
> 1. Why is this 'too complex for the compiler' ?
> 2. How can I know when the compiler's complexity limit has been
> reached?
> 
> (OK, I don't really expect you to be able to answer. It's just that I
> expect a compiler to relieve me of worrying about complex statements.
> The only complexity is really (IMAGE_SIZE * projnum), all the rest are
> just adding constants - in my simple view).
> 
> Many thanks,
> 
> Robert
> 
> 
> _______________________________________________
> AVR-GCC-list mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/avr-gcc-list


-- 
Unna dig ett bättre liv, dumpa Windows!




reply via email to

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