Max Programmspeicher überschritten


#1

Hallo zusammen,

nachdem ich nun erfolgreich meinen BME680 in den Code eingebunden habe und die Übertragung auf POST und JSON geändert habe, ist nun die Speichergröße deutlich überschritten (s.u.).

Insbesondere die BME680 libs machen sich da wohl bemerkbar :-(
Da ich nicht so große Erfahrungen im Mikrocontroller/C Bereich habe, meine Frage:

  • Wo kann ich ansetzen, um die Size signifikant zu reduzieren?
  • Gibt es eine Möglichkeit den Speicher irgendwo/irgendwie zu erweitern?
  • Hab ich mit meiner Konstellation (Stalker3.1/GSM/Scale/TempArray/BME680) hier überhaupt eine Chance, oder muss ich meinen BME680 wieder einpacken?

Danke Johannes

PS: Soll ich bevorzugt in Englisch schreiben, oder ist das egal?

Der Sketch verwendet 34136 Bytes (111%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.

Globale Variablen verwenden 1693 Bytes (82%) des dynamischen Speichers, 355 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

#2

Hallo Johannes,

schade, dass der Speicher Deiner MCU hier zur Neige geht. Klappt es denn weiterhin ohne die BME680 Bibliothek und wie sind die Werte, wenn man sie weglässt?

Davon abhängig könnte man entweder entscheiden, ob man von Haus aus darauf verzichten muss oder ob es vielleicht Chancen gäbe. Ich sähe zwar schon Chancen, den verwendeten Firmwarecode weiter zu verkleinern, aber entsprechende Optimierungen sind natürlich immer zähe Arbeiten.

Halte uns also gerne auf dem Laufenden, ggf. können wir da schon nocheinmal nachlegen und den Code aus der Perspektive des Fußabdrucks verbessern.

Viele Grüße,
Andreas.


#3

Die 11% bekommt man bestimmt noch weg. PROGMEM verwenden! (suche mal hier im Forum danach)


#4

@Andreas
Ohne BME680 lib klappt es nicht, da diese zur Messung benötigt wird. Oder meintest Du, ob es ohne BME680 noch funktioniert? Ja, wenn ich den BME Schalter (habe ich über #define reingemacht) deaktivere, läuft alles wie gehabt:
Ausgabe:

POST /xxx/xxxxxx.php HTTP/1.1.
Host: xxxx.de.
Accept: */*.
Connection: Keep-Alive.
User-Agent: SIMCOM_MODULE.
Content-Length: 95.
.
{"timestamp":"2019/01/05 14:08:21","weight":"3.550","temperature":" 23.1","voltage":" 4.66"}

@weef Danke, PROGMEM schau ich mir mal an


#5

Kurze Rückmeldung:
Nachdem ich nach meinen Möglichkeiten Code gekürzt, mit PROGMEM einige Variablen rausgezogen habe, diverse Bibliotheken manuell entschlackt habe, fehlten immer noch mehr als 1000B :-(
Aber: Weil ich noch einen DHT11 in Schublade hatte und später auch bzgl. des Speichers noch etwas Luft haben möchte, habe ich entschieden, dass der BME680 zukünftig in der Wetterstation für meine Mama seinen Dienst tut :-).
Noch zur Info: Beim DHT ist mir aufgefallen, dass ich wohl eine andere DHT Bibliothek als @clemens im Code hatte. Ich hatte mir die hier geholt: https://github.com/adafruit/DHT-sensor-library
Jedenfalls habe ich jetzt den DHT Code entsprechend für mich angepasst.
Softwaremäßig und auch von der Datenübermittlung und -Weiterverarbeitung passt mir jetzt alles, so dass ich mir jetzt noch ein Shield per Fritzing mache, wo ich meinen HX711 unterbringe und ein paar Klemmen (so ähnlich wie bei @clemens ), so dass das Teil dann auch nach was aussieht.

Aktuelle herrscht da noch das Chaos :-) :-)


#6

Sehr schön das Foto! Ein echtes “Rattennest”! ;-) Falls du noch eine Platine brauchst, einen ADS1231 dazu finde ich sicher auch noch, schreib mir gerne!