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

Reply via email to