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.
Tim schrieb: > Ein Compilertool oder sowas? Stelle bei deinen Compiler-/Linker-Toolchain mal ein das ein "map file" erzeugt wird und schaue dann in dieses rein...
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.
Das ist beim AVR so, der eine havard Architektur hat. Beim einer von Neumann Architektur sollten die Strings automatisch im flash landen.
Ich hätte nicht gefragt, wenn die Strings/Arrays nicht per Default im RAM landen würden...
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.
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...
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.
:
Bearbeitet durch Moderator
Es gibt im NONOS SDK keine solche Funktion. War aber auch nur ein Beispiel. Das gilt auch für os_sprintf z.B.
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.