lets try this source file:

#include <stdint.h>
#include <avr/pgmspace.h>

static uint8_t data[] =
{
        [0 ... 9] = 1,
        [10 ... 99] = 2,
        [100 ... 999] = 3,
        [1000 ... 1499] = 4
};

static const uint8_t rodata[] PROGMEM =
        { [0 ... 31*1024] = 5 };

int main (void)
{
        while(1)
        {
                __asm__ __volatile__ ("nop"); // do nothing
        }       
        return (0);
}

rodata is used to fill the flash region.

In the linker script be sure the MEMORY command is:
MEMORY
{
  text   (rx)   : ORIGIN = 0, LENGTH = 32K
  data   (rw!x) : ORIGIN = 0x800060, LENGTH = 2K
  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 1K
}

text region is as long as 32KB, as atmega32's flash.

If you compile you will obtain a binary bigger than 32KB
I would expect a linker error like:
region `text' overflowed by xx bytes

if you run avr-size, you get:

AVR Memory Usage
----------------
Device: atmega32

Program:   33408 bytes (102.0% Full)
(.text + .data + .bootloader)

Data:       1500 bytes (73.2% Full)
(.data + .bss + .noinit)



flash is 102.0% Full... but linker doesn't warn

I know that .data is to be considered belonging to sram, but its initial
image is hold in flash, and according to my opinion this fact must be
take into account, otherwise the binary may not work


I tried both
avr-gcc 4.3.3 + binutils 2.19.1 and
avr-gcc 4.4.4 + binutils 2.20.1
with same results



the sample projeject is here:
http://dl.dropbox.com/u/7966431/test_avr-ld.tar.gz

it include test.c source, linker script and Makefile.



regards,

Max


_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to