Hallo zusammen Ich bin derzeit an einem Projekt dran, bei dem ich unter anderem den gemessenen Lux Wert in candela/m2 umrechnen muss, was aber ganz einfach mit einer linearen funktion passiert. (Ich arbeite mit einem SAMD09) Memory (derzeit): Program Memory Usage : 9308 bytes 56.8 % Full Data Memory Usage : 4064 bytes 99.2 % Full Wenn ich nun bei meiner Candela Berechnung den Wert zurückgeben will, erhöht sich der Flash Speicher dabei auf Program Memory Usage : 16976 bytes 103.6 % Full(Memory Overflow) Data Memory Usage : 4064 bytes 99.2 % Full Das man durch eine einfach y = mx + k Rechnung fask 8kB an RAM Speicher braucht scheint mir ein wenig schleierhaft. Hier ist der Übeltäter: /* y = mx + k */ /* Steigung wird hier mit Zwei Punkten mit x und y berechnen */ double m = (1/ (double) denominator) *(double) numerator; /* Gleichung nach k Auflösen und Punkt einsetzten */ double k = (double) lowerLuminancePoint - (m * (double)lowerAmbienceLightPoint); double tmpValue = m * (double) lux; uint16_t candelaValue = (uint16_t) (tmpValue + k); Wenn ich jetzt hier "candelaValue" als return zurückgebe oder in eine globale Variable schreibe erhalte ich 8kB mehr Flashspeicher Nutzung? Weiss jemand was hier der Fehler ist?
@ Patrick Schmelzer (patricksch) >Hier ist der Übeltäter: >Wenn ich jetzt hier "candelaValue" als return zurückgebe oder in eine >globale Variable schreibe erhalte ich 8kB mehr Flashspeicher Nutzung? Da wird relativ knallhart die Fließkommabibliothek eingebunden und die scheint auf deinem System nicht sonderlich sparsam zu sein. Hier reicht wahrscheinlich Festkommaarithmetik.
Die Libraries, die vom Compiler für float eingebunden werden sind riesig. https://www.mikrocontroller.net/articles/Festkommaarithmetik
Aber eine RAM-Auslastung von 99,2% ist auch schon reichlich viel, da bleibt kaum Platz für den Stack!
Der RAM ist so hoch, da ich FreeRTOS benutze und in dem Beispiel den Heap bis fast aufs Maximum hochgeschraubt habe. Danke für die schnellen Anworten!
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.