Forum: Compiler & IDEs SD/MMC mit ATmega8


von Alex44 (Gast)


Lesenswert?

Hallo,

ich habe gerade ein Problem beim Compilieren/Linken eines Programms für 
einen Atmega8:
1
Linking: main.elf
2
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 main.o ff.o diskio.o   --output main.elf -Wl,-Map=main.map,--cref -lm
3
/usr/lib/gcc/avr/4.3.5/../../../avr/bin/ld: main.elf section `.text' will not fit in region `text'
4
/usr/lib/gcc/avr/4.3.5/../../../avr/bin/ld: region `text' overflowed by 12146 bytes

Wenn ich das richtig verstehe wird hier eine Größengrenze überschritten.
Was sagt mir diese und wie ändere ich das?

von Alex44 (Gast)


Lesenswert?

Ergänzung:

wenn ich das Gleiche für einen Atmega32 übersetze ergibt sich folgende 
Größe:
1
Size after:
2
main.elf  :
3
section     size      addr
4
.text      20822         0
5
.data        110   8388704
6
.bss         830   8388814
7
.stab      28992         0
8
.stabstr    7227         0
9
Total      57981

meine main.hex ist dann 57kb groß :O

von 900ss (Gast)


Lesenswert?

Alex44 schrieb:
> Wenn ich das richtig verstehe wird hier eine Größengrenze überschritten.

Ja, Segment .text wird "gesprengt".

> Was sagt mir diese und wie ändere ich das?

Du hast 8kB im Mega8. Dein Programm braucht ca. 20000 Byte im Segment 
.text wie du im 2. Posting siehst.

Wie du das änderst? Ist schwer zu sagen aus der Ferne. Du brauchst 
soviel Platz mehr als der Mega8 zur Verfügung stellst, dass das kaum zu 
retten ist.
Wenn du soviel unnötigen Code hast, dann entferne diesen.

Oder du hast elendig viele Daten (Arrays, Texte) im Flash mit 
angesiedelt.
Diese rausschmeißen wenn es geht. Ins Ram verschieben geht nicht, da ist 
noch weniger Platz.

Die beste Lösung: Mega32 verwenden.

von Alex44 (Gast)


Lesenswert?

Danke schon mal Infos...

Was bedeuten die Sektoren?

Und warum ist die .hex 57kB groß?

Wie kann diese Datei in den ATmega32 rein passen, wenn er doch nur 32kB 
Flash speicher hat?

Gruß
Alex

von holger (Gast)


Lesenswert?

>Was bedeuten die Sektoren?

Welche Sektoren?

>Und warum ist die .hex 57kB groß?

Das kann nur der Linker wissen;)

>Wie kann diese Datei in den ATmega32 rein passen, wenn er doch nur 32kB
>Flash speicher hat?

Von der HEX Datei gehen nur ungefähr 1/3 in den ATMega32 rein.
Das liegt am Dateiformat (das ich dir jetzt nicht aufdröseln werden).

Nimm einen ATMega328. Passt dann schon.

von Alex44 (Gast)


Lesenswert?

holger schrieb:
> Welche Sektoren?

section
.text
.data
.bss
.stab
.stabstr

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.