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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.