Forum: Mikrocontroller und Digitale Elektronik Benutzung von Flashspeicher


von Patrick S. (patricksch)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

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

von Conny G. (conny_g)


Lesenswert?

Die Libraries, die vom Compiler für float eingebunden werden sind 
riesig.

https://www.mikrocontroller.net/articles/Festkommaarithmetik

von Falk B. (falk)


Lesenswert?

Aber eine RAM-Auslastung von 99,2% ist auch schon reichlich viel, da 
bleibt kaum Platz für den Stack!

von Patrick S. (patricksch)


Lesenswert?

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