RAM-Problem mit der Adafruit GFX Library

Hallo Leute,

Ich habe ein Problem mit einem Befehl der Adafruit GFX Library. tft.gettextbounds(...)

gibt einem Werte zurück, die die Breite und Höhe eines Textes beschreiben, damit man vor dem Schreiben den Hintergrund zurücksetzen kann.

Das Problem ist jetzt, dass der Befehl jedes Mal ein wenig SRAM verbraucht und nicht wieder freigibt, was bei meiner Anwendung echt ungünstig ist, da der Befehl mehrfach pro Sekunde aufgerufen wird und mein Programm somit sehr schnell keinen freien Speicher mehr hat.

Ich kenne mich nicht gut genug aus, um zu wissen, ob und wie man das beheben kann, ich denke aber wenn man es beheben kann, dann in der Library...

Wenn ihr Lust habt mir zu helfen findet ihr hier: https://learn.adafruit.com/adafruit-gfx-graphics-library/overview den Download-Link. Wenn ihr andere Ideen als Lösung habt, gerne her damit :)

Ich würde ungerne auf den Befehl verzichten.. Vielleicht kann man ja auch im Arduino Sketch selbst irgendwie festlegen, dass der Speicher wieder freigegeben werden soll. Ich bin jedenfalls dezent überfordert.

Lg xkap50x

Verwende für die Anweisungen mit denen du Strings auf das Display schreibst, das "F-Makro" und du wirst Ram sparen.

Beim Anzeigen wird der RAM aber imho trotzdem mit dem String "belastet".

Zeig doch mal den gesamten Code.

xkap50x:
Wenn ihr Lust habt mir zu helfen findet ihr hier: Overview | Adafruit GFX Graphics Library | Adafruit Learning System den Download-Link. Wenn ihr andere Ideen als Lösung habt, gerne her damit :slight_smile:

Ich würde ungerne auf den Befehl verzichten… Vielleicht kann man ja auch im Arduino Sketch selbst irgendwie festlegen, dass der Speicher wieder freigegeben werden soll. Ich bin jedenfalls dezent überfordert.

Prüfe mal nach, WAS GENAU DU ALS Text-Parameter an die Funktion übergibst!

Libraries erwarten zu 99,9%, dass eine Zeichenkette (Text) als char-Array bzw. Pointer-auf-char-Array) übergeben wird.

Aber hier in diesem Forum sehe ich es immer wieder, dass Noobs anstelle von char-Arrays und char-Pointern bevorzugt "String-Objekte erzeugen und verwenden.

Machde in Deinem Quelltext mal eine Suche nach dem Schlüsselwort “String”.
Und wenn Dein Code den Begriff “String” enthält, um ein String-Objekt zu deklarieren, dann hast Du vermutlich bereits die Quelle der Inkompatibilität gefunden.

Die einzigen Library-Funktionen, die unter Arduino mit String-Objekten gut klarkommen, sind die “print()” bzw. println() Funktionen wie beispielsweise in “Serial-print()”. Alle anderen Library-Funktionen mit Zeichenkettenbehandlung erwarten dagegenchar-Arrays bzw. char-Array-Ponter als Funktionsparameter und keine “String” Objekte.

// Pass string and a cursor position, returns UL corner and W,H.
void Adafruit_GFX::getTextBounds(char *str, int16_t x, int16_t y,
int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) {

Die Funktion erwartet char-Array-Pointer.