Forum: Compiler & IDEs Problem mit Segmenten bei WinAVR-20071221


von Ralf R. (voltax)


Lesenswert?

Hallo,

Problem: Nach dem Update von AVRStudio (4.12 SP4 -> 4.13 SP2) und WinAVR 
(WinAVR-20060421 -> WinAVR-20071221) erhalte ich komischerweise beim 
Compilieren eines alten (bisher funktionierenden) Projekts 
Fehlermeldungen, dass sich jetzt Segmente überschneiden würden.

Ich habe zwei eigene Segmente im Flash definiert (Atmega168):
.bootloader 0x1F00
.basflash  0x1C00

Früher passte das, da wurde Segment .text automatisch richtig angepasst, 
jetzt aber offenbar nicht mehr. Wie kann ich das reparieren?

1
Mit AVRStudio V4.13 SP2 und neuem WinAVR-20071221
2
-------------------------------------------------
3
4
Build started 2.1.2008 at 10:01:35
5
avr-gcc.exe  -mmcu=atmega168 -Wall -gdwarf-2                                                              -DF_CPU=18432000UL -Os -fsigned-char -MD -MP -MT AVRFlashBasic.o -MF dep/AVRFlashBasic.o.d  -c  ../AVRFlashBasic.c
6
avr-gcc.exe -mmcu=atmega168 -Wl,-Map=AVRFlashBasic.map -Wl,-section-start=.bootloader=0x3e00 -Wl,-section-start=.basflash=0x3800 AVRFlashBasic.o     -o AVRFlashBasic.elf
7
c:/atmel/winavr/bin/../lib/gcc/avr/4.2.2/../../../../avr/bin/ld.exe: section .basflash [00003800 -> 00003cff] overlaps section .text [00000000 -> 000039c9]
8
c:/atmel/winavr/bin/../lib/gcc/avr/4.2.2/../../../../avr/bin/ld.exe: section .data [000039ca -> 000039d1] overlaps section .basflash [00003800 -> 00003cff]
9
make: *** [AVRFlashBasic.elf] Error 1
10
Build failed with 2 errors and 0 warnings...
11
12
13
14
Mit AVRStudio V4.13 SP2 und altem WinAVR-20060421
15
-------------------------------------------------
16
17
Build started 2.1.2008 at 09:57:41
18
avr-gcc.exe  -mmcu=atmega168 -Wall -gdwarf-2                                                              -DF_CPU=18432000UL -Os -fsigned-char -MD -MP -MT AVRFlashBasic.o -MF dep/AVRFlashBasic.o.d  -c  ../AVRFlashBasic.c
19
avr-gcc.exe -mmcu=atmega168 -Wl,-Map=AVRFlashBasic.map -Wl,-section-start=.bootloader=0x3e00 -Wl,-section-start=.basflash=0x3800 AVRFlashBasic.o     -o AVRFlashBasic.elf
20
avr-objcopy -O ihex -R .eeprom  AVRFlashBasic.elf AVRFlashBasic.hex
21
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex AVRFlashBasic.elf AVRFlashBasic.eep || exit 0
22
avr-objdump -h -S AVRFlashBasic.elf > AVRFlashBasic.lss
23
24
AVR Memory Usage
25
----------------
26
Device: atmega168
27
28
Program:   14132 bytes (86.3% Full)
29
(.text + .data + .bootloader)
30
31
Data:        171 bytes (16.7% Full)
32
(.data + .bss + .noinit)
33
34
EEPROM:      507 bytes (99.0% Full)
35
(.eeprom)
36
37
38
Build succeeded with 0 Warnings...


Grüße Ralf

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sieht mir so aus, als wäre deine Basisapplikation jetzt einfach zu
groß geworden, sodass sie nicht mehr unterhalb des Bootloaders passt.

Da müsstest du mal die Gründe analysieren.

von Ralf R. (voltax)


Lesenswert?

Hallo Jörg,

Ja, das scheint die Lösung zu sein. Wenn ich zum Test einen größeren 
Codeabschnitt auskommentiere, dann gibts das Problem mit den 
überlappenden Segmenten nicht mehr. Muß ich wohl einen anderen 
Controller nehmen.

Grüße Ralf

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ralf Rosenkranz wrote:

> Muß ich wohl einen anderen
> Controller nehmen.

Nö, erstmal nachgucken, wo sich denn der Code so aufgebläht hat.
Vielleicht lässt sich ja noch was optimieren.

von Ralf R. (voltax)


Angehängte Dateien:

Lesenswert?

Hallo Jörg,

nach dem Vergleich des alten und des neuen Map-Files ist mir nicht 
wirklich klar geworden, was sich "aufgebläht" hat, ich sehe nur, dass 
viele Zeilen dazugekommen sind, die mir aber nicht viel sagen. Ab 
*(.trampolines) gehts los. Ich habe die beiden Files mal angehängt. Ist 
das alles so wie es sein soll?

Grüße Ralf

von Der T. (Gast)


Lesenswert?

Verwendest du float?

Wenn ja: Dort liegt zu 99% der Hund begraben.. ;)
(Version 20071221 hat dort einen Bug)

Gruß,
Techniker

von Zewa (Gast)


Lesenswert?

>(Version 20071221 hat dort einen Bug)

Wann wird das eigentlich gefixt ? Ist doch jetzt schon ne weile bekannt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Zewa wrote:

>>(Version 20071221 hat dort einen Bug)
>
> Wann wird das eigentlich gefixt ? Ist doch jetzt schon ne weile bekannt.

Der Bug ist noch am gleichen Tag repariert worden, an dem der Bugreport
beim avr-libc-Projekt aufgeschlagen ist.  Dmitry war wirklich schnell
hier.

Nun braucht's aber erstmal eine neue avr-libc-Version (kein großes
Problem), und von da muss das Ganze einen Weg in eine neue WinAVR-
Version finden (was sicher etwas länger dauert).  Außerdem solltest
du dir Eric Weddingtons Ankündigung vom WinAVR 20071221 nochmal
durchlesen, da hat er ausdrücklich darauf verwiesen, dass er das
unmittelbar vor den Weihnachtsferien herausgegeben hat und auf allerlei
Feedback erst nach diesen eingehen kann.  Oder wie stellst du dir so
ein Familienweihnachten mit 3 Kindern vor?

von Zewa (Gast)


Lesenswert?

Ich wollte hier keinen Angreifen oder so.
Ich habe großen Respekt vor allen die am WinAVR mitwirken und die ganzen 
Sachen kotenlos zu Verfügung stellen.
Leider war mir nicht klar, wieviel Aufwand es ist. So warte ich eben 
geduldig auf die neue Version vom WinAVR ;-)

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Du brauchst nur auf die neue LIBC zu warten, das geht sicherlich 
schneller als Winavr. Den Winavr kannst Du dann selbst mit der neuen 
Libc "versorgen" (=> drüberkopieren)

Frank.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.