Programmspeicherverbrauch bei Funktionsaufruf

OP #1662115
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
#1662121
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.
#1662138
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

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