Forum: Compiler & IDEs float Berechnung erzeugt Compiler-Fehler??


von Daniel Held (Gast)


Lesenswert?

Hallo,
ich möchte in meinem Programm die Genauigkeit der Berechnung erhöhen und 
habe folgende Zeilen eingefügt:

float c0 = 0;
.
.
c0 = Proh * 0.534f;

Allerdings bringt mir der Compiler folgende Fehlermeldung:

Linking: main.elf
avr-gcc -mmcu=atmega8 -I. -g   -Os -funsigned-char -funsigned-bitfields 
-fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o 
-std=gnu99 -Wp,-M,-MP,-MT,main.o,-MF,.dep/main.elf.d main.o ea_dog.o 
menu.o   --output main.elf -Wl,-Map=main.map,--cref    -lm
C:\Programme\WinAVR\bin\..\lib\gcc\avr\3.4.3\..\..\..\..\avr\bin\ld.exe: 
region text is full (main.elf section .text)
make.exe: *** [main.elf] Error 1

Wenn ich die Berechnung auskommentiere gibt es kein Problem.
Kann mir jmd. helfen??

thx Daniel

von fieser Rahul (auch Oskar genannt) (Gast)


Lesenswert?

Nix Compiler:
>Linking: main.elf

Linker...

>region text is full
Das ist der Fehler...(was der bedeutet, kann ich aber auch nicht sagen).

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

fieser Rahul (auch Oskar genannt) wrote:

> (was der bedeutet, kann ich aber auch nicht sagen).

Dass kein Platz mehr für den großen Gleitkomma-Code im ATmega8
vorhanden ist.

von Daniel Held (Gast)


Lesenswert?

Das nenn ich schnelle Hilfe.
So habe ich keine Chance?
Betrifft das denn kompletten Code für den Flash oder nur einen 
bestimmten Raum?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel Held wrote:

> So habe ich keine Chance?

Du kannst ja gucken, was sonst noch alles Platz vermplempert.

> Betrifft das denn kompletten Code für den Flash oder nur einen
> bestimmten Raum?

Was soll ,,ein bestimmter Raum'' denn sein?  Flash ist flash.

Was mir immer ganz hilfreich war für die Analyse:

avr-nm --size-sort --print-size <name of your ELF file>

Alle Symbole mit einem "T" (globale Funktionen), "t" (statische
Funktionen) und letztlich auch mit einem "D" oder "d" (globale bzw.
statische Daten, die haben ihre Initialisierungswerte im ROM)
interessieren dich hier.  "B" und "b" kannst du ignorieren, die
brauchen ausschließlich RAM (werden beim Start mit 0 initialisiert).

Die erste Spalte ist die Adresse des Symbols (die interessiert dich
nicht nennenswert), die zweite ist die Größe (beides hexadezimal).

von unbeschreiblicher Rahul (Gast)


Lesenswert?

>Dass kein Platz mehr für den großen Gleitkomma-Code im ATmega8
>vorhanden ist.

Und wieder was gelernt.
Danke!

von Karl H. (kbuchegg)


Lesenswert?

Wenn das deine einzige float Berechnung ist:

Was rechnest denn du da? Das kann man doch sicherlich
auch mit Fixed Point Arithmetik machen. -> Die ganze
Floating Point Library fällt wieder weg.

von Daniel Held (Gast)


Lesenswert?

OK, danke nochmal - werd mein Glück versuchen.

von Peter S. (psavr)


Lesenswert?

Arbeitest Du mit AvrStudio? Dann könnte es hilfreich sein, wenn Du bei 
den Linker Optionen die libm.a  hinzufügst, (falls nicht schon gemacht). 
Diese belegt deutlich weiniger Speicher als die generische GCC libm.

MfG Peter

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Die Linker-Kommandozeile hatter doch gepostet...

von Peter S. (psavr)


Lesenswert?

Oups, tatsächlich, da steht ja: -lm
...da hatte ich wohl Tomaten auf den Augen!  ;o))

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.