Speicherplatz beim Programmieren sparen, geht das?

Hi,

ich bin auf der Suche nach einem Weg um Speicherplatz auf meinem Nano eizusparenn und würde gerne wissen auf was ich beim programmieren zu achten habe.

Ist es besser Objektorientiert zu programmieren oder normal, oder macht das später beim kompilieren gar keinen Unterschried?

Und ich habe ein Projekt, bei dem ich im Haupt Programm (setup /loop) alles auskommentiert habe. Aber wenn ich es kompilieren lasse zeigt es mir viel mehr Bytes an als eigentlich notwendig wäre ich verstehe nur nicht ganz warum? Kann es sein das die Libs die ich im Hintergrund habe auch Speicherplatz benötigen, obwohl sie garnicht benutzt werden?

Viele Grüße Nils

Sobald du eine Lib in deinem Programm eingebunden hast, braucht sie natürlich etwas Speicher - egal ob du du die Methoden au,frufst oder nicht…

Ansonsten gelten die üblichen verdächtigen: wenige String-Objekte und ausgaben, Das F-makro benutzen, den passenden, kleinsten Datentyp benutzen…

hast du denn überhaupt Platzprobleme, oder gehst du davon aus, dass es eng wird?

Ich hab auch zuerst gedacht, dass der Platz für mein aktuelles Projekt knapp wird. Ich verwende im Moment 6 teilweise recht umfangreiche Librarys und die Speicherkapazität ist trotzdem erst zur Hälfte genutzt.

Vllt. machst du dir auch unnötig Sorgen.

Hi,

ja ich mache mir sorgen das es nicht langen könnte, bin noch am anfang des Projekts und habe auch viele Libs erstellt um das Projekt schön übersichtlich zu halten, aber hatte mich gewundert, das auch obwohl ich die Libs nicht eingebunden habbe, sie speicherplat verbrauchen.

Ich dachte immer das die Libs nur zum programmieren gebraucht werden und deshalb nur auf dem PC speicherplatz wegnehmen, was mich ja nicht stört ^^. Und wenn ich dann Code aus den Libs verwende die vom Linker eingebunden werden. Aber so ist es anscheinend nicht.

Ist es denn möglich den Flash speicher zu erweitern oder muss man dann einfach auf nen größeren Pozessor setzen?

naja ich werde mal so weiter machen hoffe der Platz langt :)

Nein, weder Flash noch RAM kannst Du beim ATmega328 erweitern. RAM kannst Du beim ATmega2560 erweitern aber nicht den Flash-Speicher. Grüße Uwe

hi,

nimm doch einen atmega1284 um 5€. da mußt Du nicht so knapsen.

128k flash 16k ram

kannst Du aus der arduino-ide mit einem programmer beschicken.

gruß stefan

obwohl ich die Libs nicht eingebunden habbe, sie speicherplat verbrauchen.

Was meinst du mit “nicht eingebunden” ?
Es hängt auch von der lib ab.

z.B:
Binäre Sketchgröße: 466 Bytes ( Minimum arduino 1.02 für Uno, nackt, ohne Alles)
Binäre Sketchgröße: 1,744 Bytes ( Mit Serial.begin(9600); in setup() )
Binäre Sketchgröße: 6,036 Bytes ( Mit #include <SD.h> )
Binäre Sketchgröße: 6,900 Bytes ( Mit Verwendung der SD Library und Serial.print wie hier)

#include <SD.h>
Sd2Card card;
void setup() {
  Serial.begin(9600);
  if (! card.init(SPI_HALF_SPEED, 10))
  Serial.println(F("SD card init failed"));
}
void loop() { }

Obwohl Serial nicht extra includiert werden muss, kostet sie erst richtig Platz, wenn sie benutzt wird.
Die SD Library legt auch statische Objekte an, so dass gleich was mitgelinkt wird, sobald SD.h auch nur includiert wird.
Aber natürlich kommt auch was dazu, sobald Funktionen einer .cpp - Datei verwendet werden.
( Den F-Makro weglassen “spart” übrigens nur einmalig 16 Bytes )

Ob du deinen Code als c++ class definierst oder eher als c Funktionen, macht nicht den großen Unterschied aus, denke ich.

Einerseits ist es zwar aus sportlicher Sicht gut, den kleinstmöglichen Sketch zu erzeugen,
aber ein größerer Controller ist sicher einfacher und effektiver.

Hi, danke für die Antworten, habt mir sehr weitergeholfen. @ eisebaer genau so werde ich es auch machen, werde mal schauen was ich am schluss an Speicherplatz brauche und mir ggf. nen größeren Atmega kaufen ^^.

@michael_x ja genau das war was mich verwirrt hatte, super danke ^^.