Thank you very much for your reply. I googled to see how I can use
-fdata-sections to achieve this. But couldnt find much information. Can
you please briefly explain how I can use -fdata-sections to enforce data
ordering in SRAM ?
----- Original Message ----
From: "Weddington, Eric" <address@hidden>
To: Raj Sharma <address@hidden>; address@hidden
Sent: Tuesday, May 20, 2008 1:06:25 PM
Subject: RE: [avr-gcc-list] Order of variables placed in .data and .bss sections
> -----Original Message-----
> org] On Behalf Of Raj Sharma
> Sent: Tuesday, May 20, 2008 11:21 AM
> To: address@hidden
> Subject: [avr-gcc-list] Order of variables placed in .data
> and .bss sections
> Dear all,
> Is there a way to force some order in the way variables
> (global/static) are placed in .data and .bss sections ? For
> example, let my program has 2 initialized global variables g1
> and g2 and 5 uninitialized global variables u1,u2,u3,u4 and
> u5. g1 and g2 are first placed in program memory after .text
section and __do_copy_data copies them to the starting
> address in SRAM. u1 through u5 are not explictitly stored in
> program memory but __do_copy_bss places them just after g1
> and g2 in SRAM and zeroes them out. I want to know if I can
> somehow specify the order of these variables, say g1
> followed by g2; then u3,u4,u5,u1,u2.
> I noticed that the order in which the variables are
> declared/defined in C file or assembly file does not
> correspond to the way they are placed in SRAM.
> Thanks in advance,
In theory it can be done, but you will have to use -fdata-sections, and
a customized linker script. You may also have to either, customize the
startup code in avr-libc, or have some custom code right after startup
that takes care of the .data initialization and .bss clearing yourself.
Why do you need to do this
I am working on incremental compiling/linking and I need the techniques to preserve maximum similarity between the old and new versions of the executable image.