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
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.
@ 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.