Forum: Compiler & IDEs Beispielprogramm Pi_on_2313.c, hex-Datei zu groß


von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo allerseis,

ich wollte mal wieder etwas einfaches machen, deshalb nur ein 
vorgegebenes Programm compilieren und schauen, wie der Mikrocontroller 
4000 Nachkommastellen von Pi ausgibt auf's Terminal. Nur war das 
Compilieren leider nicht in der Weise erfolgreich wie gewünscht, denn 
das Programm ist zu groß.

http://www.mikrocontroller.net/articles/4000_Stellen_von_Pi_mit_ATtiny2313


AVR-Studio steuert folgende Compilerversion: WinAVR-20100110


Zitat aus dem Original:
"Als Sprache wählte ich C99 und als Compiler avr-gcc[5] 4.7 oder neuer, 
so daß ein Executable erzeugen wird, das in die 2k Programmspeicher 
eines ATtiny2313 hineinpasst."


folgende Textpassage habe ich bisher noch nicht umgesetzt (Zitat aus dem 
Original):
              "The only compiler that produces code small enough for the
              AVR ATtiny2313 hardware is avr-gcc 4.7 together with 
AVR-Libc.

                 avr-gcc pi.c -o pi.elf $(CFLAGS) $(OPT) $(DEFS) 
$(LDFLAGS)

              with the following abbreviations for convenience:

              CFLAGS  = -std=c99 -mmcu=attiny2313
              OPT     = -Os -mcall-prologues -fno-split-wide-types
                        -fno-caller-saves -fno-tree-loop-optimize
              LDFLAGS = -Wl,--relax -Wl,--gc-sections -lm
              DEFS    = -DF_CPU=22118400 -DBAUDRATE=115200 
-DHOST_WINDOWS    "

Werte eingetragen und am mein spezielles Projekt angepaßt (Dateiname und 
Baudrate):
avr-gcc pi_on_2313.c -o PI_on_2313.elf $(-std=c99 -mcu=attiny2313) $(-Os 
-mcall-prologues -fno-split-wide-types -fno-caller-saves 
-fno-tree-loop-optimize) $(-DF_CPU=20000000 -DBAUDRATE=57600) 
$(-Wl,--relax -Wl,--gc-sections -lm)


________________________________________________
Nur mit den Standardeinstellungen des AVR-Studios und ohne die Hinweise 
zu beachten, ist das Programm leider zu groß geraten:

AVR Memory Usage
----------------
Device: attiny2313

Program:    4610 bytes (225.1% Full)
(.text + .data + .bootloader)

Data:        264 bytes (206.3% Full)
(.data + .bss + .noinit)


Build succeeded with 2 Warnings...


Die von der anderen ACR-GCC-Version her vorgegeben Kommandozeile poaßt 
nicht genau. Hat jemand Ideen zur weiteren

Vorgehensweise? die Kommandozeile an deie aktuell installierte Versio 
anpassen? In AVR-Studio bestimmte Einstellungen machen?

Eine andere float-Bibliothek verwenden?



Mit libc.a in AVR-Studio eingestellt:
----------------
Device: attiny2313

Program:    2154 bytes (105.2% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Build succeeded with 2 Warnings...




Mit libm.a in AVR-Studio eingestellt:
AVR Memory Usage
----------------
Device: attiny2313

Program:    2154 bytes (105.2% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Build succeeded with 2 Warnings...



Mit libobjc.a in AVR-Studio eingestellt:
Device: attiny2313

Program:    4610 bytes (225.1% Full)
(.text + .data + .bootloader)

Data:        264 bytes (206.3% Full)
(.data + .bss + .noinit)


Build succeeded with 2 Warnings...


Mir bleiben folgende Optionen:
- aufgeben
- größeren Prozessor verwenden, z.B mega48, AT90S4433
- Anregungen der Experten umsetzen, damit es in den 2313 hinein paßt
- genau die vorgegebene GCC-Version installieren und damit compilieren, 
falls die vorgegebene Kommandozeile paßt.
- sich hier durchkämpfen (?):
file:///C:/WinAVR-20100110/doc/gcc/HTML/gcc-4.3.2/gcc/Option-Summary.htm 
l#Option-Summary
file:///C:/WinAVR-20100110/doc/gcc/HTML/gcc-4.3.2/gcc/Optimize-Options.h 
tml#Optimize-Options

Kann mir da jemand weiter helfen bitte?

mit freundlichem Gruß

von Timmo H. (masterfx)


Lesenswert?

Christian S. schrieb:
> Mir bleiben folgende Optionen:
> - aufgeben
> - größeren Prozessor verwenden, z.B mega48, AT90S4433
> - Anregungen der Experten umsetzen, damit es in den 2313 hinein paßt
> - genau die vorgegebene GCC-Version installieren und damit compilieren,
> falls die vorgegebene Kommandozeile paßt.
> - sich hier durchkämpfen (?):
> file:///C:/WinAVR-20100110/doc/gcc/HTML/gcc-4.3.2/gcc/Option-
> Summary.html#Option-Summary
> file:///C:/WinAVR-20100110/doc/gcc/HTML/gcc-4.3.2/gcc/Optimize-
> Options.html#Optimize-Options
>
> Kann mir da jemand weiter helfen bitte?
Wie wärs mit richtig lesen? Aus deinen origial zitiertem Text z.B.
> Zitat aus dem Original:
> "Als Sprache wählte ich C99 und als Compiler avr-gcc[5] 4.7 oder neuer,
> so daß ein Executable erzeugen wird, das in die 2k Programmspeicher
> eines ATtiny2313 hineinpasst."

Also ab auf die Atmel HP und die aktuelle Toolchain 4.7.x runterladen. 
Die erzeugt teilweise erheblich kleineren Code (mit Optimierungen 
aktiviert) als deine verwendete 4.3.2

: Bearbeitet durch User
von Christian S. (roehrenvorheizer)


Lesenswert?

Also liegt es direkt am verwendeten Compiler.

Ok, danke :-)

von MWS (Gast)


Lesenswert?

Christian S. schrieb:
> Program:    4610 bytes (225.1% Full)

Christian S. schrieb:
> Also liegt es direkt am verwendeten Compiler.

Nicht allein, außerdem musst Du mit der libc linken und die angegebenen 
Compileroptionen eintragen, das steht aber ebenfalls im Kommentar.
Dann kommt auch auf 'nem neueren AVR GCC "nur" 107% Belegung raus.

von Oliver (Gast)


Lesenswert?

MWS schrieb:
> Nicht allein, außerdem musst Du mit der libc linken

Vermutlich meinst du die libm.

Oliver

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.