"wenig Arbeitsspeicher"
|
26.11.2020, 21:59
Beitrag #1
|
|||
|
|||
"wenig Arbeitsspeicher"
Hallo,
ich bekomme beim Compilieren die Meldung "Wenig Arbeitsspeicher verfügbar, es können Stabilitätsproblemme auftreten". Das bezieht sich doch auf den Arduino, nicht den PC!? Was heißt "Stabilitätsprobleme"? Kann ein Prg. OHNE Fehlermeldung abstürzen? Wie kann ich das Problem - ohne neue Hardware - entschärfen? Ist die Länge der Bezeichner von Bedeutung? Variablen möglichst lokal deklarieren? Parameterübergabe bietet doch gegenüber globalen Variablen hier wohl keine Vorteile? Danke! Gruss, wonk |
|||
26.11.2020, 22:19
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2020 22:22 von MicroBahner.)
Beitrag #2
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
(26.11.2020 21:59)wonk schrieb: Das bezieht sich doch auf den Arduino, nicht den PC!?klar. Wobei der angezeigte verbrauchte Speicher nur die globalen Variablen umfasst. Während des Programmablaufes wird aber noch weiterer Ramspeicher benötigt. (26.11.2020 21:59)wonk schrieb: Was heißt "Stabilitätsprobleme"? Kann ein Prg. OHNE Fehlermeldung abstürzen?natürlich! Ein Programm kann viele Fehler enthalten, die keine Fehlermeldung erzeugen. Wenn der Speicher kanpp wird, können Speicherbereiche überschrieben werden. (26.11.2020 21:59)wonk schrieb: Wie kann ich das Problem - ohne neue Hardware - entschärfen?Kann man so allgemein nicht sagen - hängt vom Programm ab und wie großzügig Du mit dem Speicher umgegangen bist. Edit: Ein Kandidat sind da z.B. Stringkonstante - die sollte man soweit möglich ins Flash verbannen. (26.11.2020 21:59)wonk schrieb: Ist die Länge der Bezeichner von Bedeutung?nein (26.11.2020 21:59)wonk schrieb: Variablen möglichst lokal deklarieren?Lokale Variable benötigen nur Platz im Ram während die Funktion ausgeführt wird ( es sei denn, Du hast sie 'static' deklariert ) (26.11.2020 21:59)wonk schrieb: Parameterübergabe bietet doch gegenüber globalen Variablen hier wohl keine Vorteile?Bezogen auf den Speicherverbrauch sind die Parameter wie lokale Variable zu sehen. Gruß, Franz-Peter |
|||
26.11.2020, 22:21
Beitrag #3
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
Ohne den Sketch zu sehen ist alles nur Kaffeesatzlesen.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
26.11.2020, 22:44
Beitrag #4
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
(26.11.2020 22:21)Tommy56 schrieb: Ohne den Sketch zu sehen ist alles nur Kaffeesatzlesen. ...und dann kommt es noch darauf an welche CPU verwendet wird. lgbk An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch. 1+1 = 10 ![]() ![]() |
|||
26.11.2020, 22:51
Beitrag #5
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
(26.11.2020 22:44)Bitklopfer schrieb: ...und dann kommt es noch darauf an welche CPU verwendet wird. Ja, auch das Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
27.11.2020, 11:35
(Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 17:14 von wonk.)
Beitrag #6
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
(26.11.2020 22:19)MicroBahner schrieb: Edit: Ein Kandidat sind da z.B. Stringkonstante - die sollte man soweit möglich ins Flash verbannen.Hallo, was heißt das? Wenn ich das richtig verstehe hat ein Arduino uno (meiner) wie ein PC RAM und "HD", hier also 2KB SRAM und 32KB Flash. Beim Übersetzen wird das Programm im Flash abeglegt, die globalen Variablen im SRAM, die lokalen Variablen werden zur Laufzeit im SRAM angelegt. Richtig? Wie bekomme ich dann z.B. Stringkonstanten in den flash? Ich wollte es ja keinem Antuen, aber wer möchte, hier das Prog.: Code: #include <SPI.h> |
|||
27.11.2020, 11:52
(Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 11:57 von Tommy56.)
Beitrag #7
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
Speicher sparen:
1. Das F-Macro lagert Zeichenkettenkonstanten ins Flash aus. Sinnvoll ab 2 Nutzzeichen Code: Serial.println(F("Ende Setup")); 2. Einzelzeichen als Zeichen ausgeben Code: // 2 Bytes 3. Auf die Klasse String komplett verzichten, statt dessen mit char-Arrays arbeiten. Infos zur Arbeit mit Zeichenketten gibt es hier. Gruß Tommy Edit: Die SD baucht allein schon 512 Bytes für den Sektorpuffer. Suche auch mal nach sprintf/snprintf "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
27.11.2020, 18:00
(Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2020 19:00 von wonk.)
Beitrag #8
|
|||
|
|||
RE: "wenig Arbeitsspeicher"
(27.11.2020 11:52)Tommy56 schrieb: 2. Einzelzeichen als Zeichen ausgebenAllein damit konnte ich 180 Byte gewinnen. Aber wieso? 1.Edit: Leider verloren. Auf meinem PC lief das so. Ich habe es dann auf mein altes Tablett (mit Arduino-IDE) kopiert, um es damit zu meinem jetzt fest verbauten Arduino zu "tragen" und dort zu flashen. Auf dem Tablett werden die Strings ' nicht akzeptiert. Fehlermeldung: "warning: character constant too long for its type" Was soll deas denn? (Gleicher Version Arduino-IDE und Libs). (27.11.2020 11:52)Tommy56 schrieb: Infos zur Arbeit mit Zeichenketten gibt es hier.Danke! Vor allem wegen der Erläuterungen! ![]() (27.11.2020 11:52)Tommy56 schrieb: Edit: Die SD baucht allein schon 512 Bytes für den Sektorpuffer.Das macht natürlich eine ganze Menge aus (hier 25% des SRAM) , und kleiner machen geht wohl nicht. Gruss, wonk |
|||
|
|
Möglicherweise verwandte Themen... | |||||
Thema: | Verfasser | Antworten: | Ansichten: | Letzter Beitrag | |
Attiny85 zu wenig Speicher | Harry | 36 | 6.390 |
20.01.2019 16:15 Letzter Beitrag: Harry |
|
![]() |
zu wenig Speicher im Nano (Schulprojekt) | Dock.Blanko | 5 | 2.343 |
10.02.2018 12:00 Letzter Beitrag: rkuehle |
Button kurz drücken Variable wenig erhöhen, lange drücken mehr erhöhen | facebraker | 18 | 10.668 |
28.02.2015 15:37 Letzter Beitrag: HaWe |
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste