Arithmetikfunktionen in AVR GCC

Gast #1112857
Lesenswert?

Hallo zusammen,

ich bin dabei, ein älteres C-Programm vom AT90S8515 auf den ATmega8515 
umzusetzen, welches einige Gleitpunktarithmetik-Operationen enthält. Das 
alte Programm wurde mit dem alten IAR C-Compiler unter Embedded 
Workbench geschrieben, jetzt verwende ich AVR Studio und GCC. Dabei 
musste ich feststellen, dass der Maschinencode, welcher damals etwa 80% 
des Programmspeichers beanspruchte, jetzt nicht mehr reinpasst.

Bei genauerer Analyse der Speicherbelegung ist erkennbar, dass der 
ICC-Compiler Arithmetik-Funktionen im Umfang von 1033 Bytes eingebaut 
hat, der GCC-Compiler hingegen 3292 Bytes. Als Optimierung ist -Os 
eingestellt, andere Einstellungen liefern noch mehr Code. Die 
Linker-Option -lm , welche in einem anderen Beitrag vorgeschlagen wurde, 
bringt keine Änderungen.

Gibt es eine Möglichkeit, die Größe des Arithmetikpakets zu verringern 
oder den Compiler dazu zu bringen, dass er nur die Funktionen einbaut, 
die er wirklich braucht?
Gast #1113005
Lesenswert?

Das Mapfile und das Listfile habe ich analysiert. Dort habe ich doch 
gesehen, welche Routinen in welchem Umfang eingebaut werden.

Die Frage ist, gibt es Möglichkeiten, mit ähnlich wenig Maschinencode 
auszukommen wie der IAR-Compiler.

Es werden übrigens nur die Grundrechenarten und Konvertierungen 
verwendet, höhere mathematische Funktionen nicht. Der GCC-Compiler baut 
dafür Library-Funktionen aus der "libgcc.a" im Umfang von mehr als 
3KBytes ein.

Viele Grüße
#1113040
Lesenswert?

@dls (Gast)

>Linker-Option -lm , welche in einem anderen Beitrag vorgeschlagen wurde,
>bringt keine Änderungen.

Sicher? Hast du die auch in Linker angegeben, nicht aus Versehen beim 
Compiler. Ist mir auch schon passiert.

>oder den Compiler dazu zu bringen, dass er nur die Funktionen einbaut,
>die er wirklich braucht?

Macht er sowieso.

MFG
Falk
Gast #1113097
Lesenswert?

Ich verwende:
 AVR Studio 4.15, Build 623
 und winavr vom 10.6.2008

Aufgefallen ist mit eine Datentabelle von 265 (nicht 256!) Bytes im 
Programmspeicher ganz am Ende mit Werten wie 0000 0001 0202 0303 ...

Die Option -lm habe ich unter [Linker Options] angegeben.

mfg
Moderator Persönliche Seite #1113528
Lesenswert?

dls wrote:

> das mit der "libm.a" war wohl der entscheidende Tipp.

Das ist zwar im Prinzip dasselbe wie das Hinzufügen von -lm, jedoch
werden die Linkeroptionen auf der Kommandozeile zu weit vorn
eingetragen.  Dadurch hat dort das Angeben von -lm nicht die
gewünschte Wirkung.

Ist das eigentlich mit der neuesten Version von AVR Studio?  Die
sollte eigentlich -lm immer mit hinzufügen.

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