SD/MMC mit ATmega8

Gast #2355187
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?
Gast #2355189
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
Gast #2355304
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.
Gast #2356256
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren