www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik codegröße plötzlich ver-20-facht!?


Autor: zander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

habe ein Porblem mit folgendem Quellcode (hier die wichtigsten 
Schnipsel):

...

int f_high = 40;
//float T_high = 500/f_high;   // 500/40 = 12.5

zwert = 0b00010011;
float teiler = 6.8;

float timeloop;
timeloop = 12.5 + zwert/teiler;

...

Problem ist folgendes, wenn ich die 12.5 aus "timeloop =..." durch 
T_High ersetze, also "timeloop = T_high + zwert/teiler;" so ist meine 
Codegröße mit einem Schlag von 200Byte auf über 4000Byte angestiegen!

Hat jemand eine Idee woran das liegt, bin (als Neuling) total 
überfragt...

Hintergrund: Ich muss aus einigen global definierten Variablen wichtige 
Werte ermitteln, so dass bei einer späteren Änderung von Variablen nicht 
der ganze Quellcode noch einmal überarbeitet werden muss.

Verwende AVR Studio mit GNU-Compiler, ATMega8 und das 
Funk-Evaluationsboard von Pollin.

Danke für eure Hilfe.
Zander

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gcc ist wohl nicht mehr in der Lage, den Ausdruck zur Compilezeit 
auszuwerten, d.h. die Konstante zu falten und zieht die komplette 
float-libs rein.

Hilfreich wäre es zu wissen, was den Platz belegt. Blicks ins 
Disassemble des elf bringt Klarheit.

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es könnte evtl. auch schon die "-lm" Option im Linker Kommando helfen.

Autor: sebba (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also zuerst einmal:

müssen es floats sein?
eigentlich schafft man fast jedes AVR Problem mit ein wenig Nachdenken 
auch mit Festkomma Arithmetik

außerdem solltest du dir mal überlegen was da jetzt konstanten sind und 
was variablen. werte die eigentlich konstant sind in variablen zu 
schreiben verwirrt etwas (evtl auch den compiler)

gruß sebba

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GCC ist normalerweise recht gut darin, Variablen bekannten Inhalts in 
eine spätere Rechnung durchzuschieben. Allerdings gibt es dabei 
entsprechend der Sprachdefinition und dem zulässigen Aliasing Grenzen: 
beispielsweise ist Schluss wenn ein Pointer auf den gleichen Datentyp 
irgendwo rumlungert.

Autor: zander (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@sebba:
wie genau soll das mit der "Festkomma Arithmetik" laufen?
bzw. wie könnte es anders aussehen, damit ich Variablen mit zwei 
Nachkommastellen hab?

die einzige globale Variable ist "f_high = 40",
"teiler" muss auch noch über eine Funktion verknüpft werden.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn f_high global ist, muss gerechnet werden! Auch wenn es const ist.

Falls es also eine globale Konstante ist, nimm #define und nicht const 
int.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... oder C++, denn das ist einer der subtileren Unterschiede.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Andreas K. (ergoproxy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ichs richtig in erinnerung hab stand beim nuesten GCC bzw vor nem 
Monat oder so dabei, dass es einen bekannten aber noch nicht gefixten 
bug mit den Fließkommalibs gibt und man sie deshalb mit dem neusten 
nicht verwenden kann / soll. Kann aber sein das ich mich irre =/ is 
etwas her.

Gruß ErgoProxy

Eddie hat grade das gefunden (ganz unten):
http://www.mikrocontroller.net/articles/WinAVR#Hil...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.