avr-chat
[Top][All Lists]
Advanced

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

RE: [avr-chat] Strange struct problem


From: Larry Barello
Subject: RE: [avr-chat] Strange struct problem
Date: Thu, 8 Dec 2005 17:06:28 -0800

You are declaring the data as automatic.  GCC is very clever and puts
automatic variables into registers unless you either a) take an address of
them, b) declare too many (or too big) or c) set optimization low.

I ran across this with a boot loader I was writing.  I wanted to save a 24
bit address in a struct (rampz + address) and the resulting code was
seriously broken (actually, the compiler would crash).  In short, your
automatic variables that are structs or unions need to fit into one of the
normal sizes: byte, word, long, or double long.

When they do fit, spectacular code will be generated.

-----------
Larry Barello
www.barello.net


| -----Original Message-----
| From: address@hidden [mailto:avr-chat-
| address@hidden On Behalf Of Daniel O'Connor
| Sent: Thursday, December 08, 2005 4:41 PM
| To: address@hidden
| Subject: Re: [avr-chat] Strange struct problem
| 
| On Fri, 9 Dec 2005 10:52, Russell Shaw wrote:
| > > Any help gratefully received!
| >
| > Beware of structure padding leaving holes.
| >
| > http://www.eskimo.com/~scs/C-faq/q2.12.html
| > http://www.eskimo.com/~scs/C-faq/q2.13.html
| 
| Hmm, I tried..
|     struct foo {
|       uint8_t a;
|       uint8_t b;
|       uint8_t c;
|       uint8_t d;
|       uint8_t e;
|     } __attribute__ ((packed)) abc = {
|       1,
|       2,
|       3,
|       4,
|       5
|     };
| 
| but there is no change in behaviour.
| 
| I would not expect GCC to pad [too much] on AVR anyway because the
| processor
| doesn't require aligned access.
| 
| --
| Daniel O'Connor software and network engineer
| for Genesis Software - http://www.gsoft.com.au
| "The nice thing about standards is that there
| are so many of them to choose from."
|   -- Andrew Tanenbaum
| GPG Fingerprint - 5596 B766 97C0 0E94 4347 295E E593 DC20 7B3F CE8C





reply via email to

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