www.mikrocontroller.net

Forum: Compiler & IDEs Programmspeicherverbrauch bei Funktionsaufruf


Autor: Michael Förster (resistor)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe einen ATTiny45PU20. Wieso steigt der Programmspeicher um mehr 
als 3600Byte wenn ich die Funktion "sqrt32_floor()"so hier aufrufe:


uint16_t calcRmsVal(uint16_t *adresse) // Berechnet den RMS-Wert
{
  uint8_t i;
  uint16_t effektiv;
  uint32_t sum_quadrat;
  sum_quadrat=0;
  for( i=0; i<ANZ_MESSWERTE; i++ )
    {
      sum_quadrat+=pow(*adresse,2); // Summe der Quadrate
  }
  effektiv=sqrt32_floor(sum_quadrat); // Wurzel
  //effektiv=sqrt32_floor(4294967295);
  return effektiv;
}

Im Gegensatz, wenn ich einfach mal als Parameter anstatt "sum_quadrat"

effektiv=sqrt32_floor(4294967295);

eingebe sind es 3600Byte ProgMem weniger. Woran könnte das liegen?

Danke & Grüße sendet
 Micha

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz einfach. Wenn du einen konstanten Wert übergibst, dann wird die 
Wurzel bereits beim Kompilieren berechnet.
Aus
effektiv=sqrt32_floor(4294967295);
wird dann
effektiv=65535;

Wenn der Wert, der übergeben wird erst zur Laufzeit bekannt ist, dann 
wird die gesamte Lib mit eingebunden.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Michael Förster (resistor)

>ich habe einen ATTiny45PU20. Wieso steigt der Programmspeicher um mehr
>als 3600Byte wenn ich die Funktion "sqrt32_floor()"so hier aufrufe:

Ich tippe mal darauf, dass pow() eine Fließkommafunktion ist. Damit 
ziehst du dir die Floating Point Lib ins Programm.
Versuch mal

      sum_quadrat+=(*adresse) * (*adresse); // Summe der Quadrate

Ach ja, deine Schleife ist recht sinnlos, weil weder der Index verwendet 
noch dein Zeiger erhöht wird ;-)

Allgemein sollte man erstmal prüfen, ob man mit Festkommaarithmetik 
auskommt.

MfG
Falk

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.