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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.