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