Which version of the compiler are you using? I find it hard to believe that
something this fundamental (a static array of five chars) would go unnoticed
until now.
I took your test case, stripped it down and it appears that GCC does the
right thing: Because the data is initialized it sticks the struct onto the
stack then initializes the values.
The version of GCC I am using is 3.4.3 (WinAvr)
Are you using some hacked version of the C runtime, or startup that isn't
initializing the SRAM data? Or is it possible you application is > 64k and
the initialized data segment is beyond the reach of the LPM command (IIRC
gcc can't access data > 64k, although the code can go that high)
-----------
Larry Barello
www.barello.net
//#define BREAKME
//#define STATIC
void null(char i);
char bar(char i)
{
#ifdef STATIC
static
#endif
struct
{
char a;
char b;
char c;
char d;
#ifdef BREAKME
char e;
#endif
} abc = {
1,
2,
3,
4,
#ifdef BREAKME
5
#endif
};
null(abc.a);
null(abc.b);
null(abc.c);
return abc.d;
}
_______________________________________________
AVR-chat mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/avr-chat