ESP8266_NONOS_SDK: Welche Strings im RAM?

Gast #6752987
Hallo,

ich verwende das ESP8266_NONOS_SDK. Um genügend freien RAM zu behalten, 
muss man ja beachten, Strings in den Flash zu packen, mit z.B. 
PSTR("..."). Oder globale const Arrays mit ICACHE_RODATA_ATTR zu 
initialisieren. Eventuell übersieht man aber einige Vorkommnisse.

Gibt es eine Möglichkeit, mir die Strings/Arrays anzeigen zu lassen, 
welche noch im RAM landen würden? Ein Compilertool oder sowas?
Ich weiß, dass ich mit nm z.B. nachschauen kann, wo welche Funktion 
landet.

Danke.
Gast
Mh, das ist leider keine große Hilfe.
Das Problem sind auch solche Dinge. Angenommen, ich schreibe

> strncasecmp(h, "tri_tra_trallala", 16)

Dann steht "testtesttest" im RAM! Richtig wäre:

> strncasecmp(h, PSTR("tri_tra_trallala"), 16)

Sowas (ganz allgemein, nicht nur mit strncasecmp, was nur ein Beispiel 
war) würde ich gerne automatisch finden können.
Gast
avr schrieb:

> Das ist beim AVR so, der eine havard Architektur hat. Beim einer von
> Neumann Architektur sollten die Strings automatisch im flash landen.

Das ist Schwachsinn und völlig unabhängig von der Architektur. Bei Code, 
der aus dem Flash geladen wird, muss natürlich jedes initialisierte 
Datum im Flash liegen. Weil: wo sollte es denn sonst herkommen?

Die Frage ist einfach nur: bleibt es erstmal nur im Flash liegen, oder 
wird es zusätzlich gleich bei der Initialisierung der Anwendung in den 
RAM kopiert.
Gast
Korrekt. Mich wundert ein bisschen, dass es keine einfache Möglichkeit 
gibt, herauszufinden, welche Konstanten in den RAM initialisiert werden. 
Ich habe händisch schon so einige herausklamüsert, aber das ist sehr 
mühsam...
Moderator Persönliche Seite
Tim schrieb:
>> strncasecmp(h, PSTR("tri_tra_trallala"), 16)
>
> Sowas (ganz allgemein, nicht nur mit strncasecmp, was nur ein Beispiel
> war) würde ich gerne automatisch finden können.

strncasecmp() wäre hier falsch, richtig wäre strncasecmp_P().

Siehe auch:

https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html

Da ist auch eine Liste derjenigen Funktionen aufgeführt, die mit Strings 
im Flash umgehen können.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.