Hi
Kurz ein Kommentar zu deinen Einstellungen:
RF1000.h: Z895 #define LOW_TICKS_PER_MOVE 4000000 von 2500000 auf 4000000
RF1000.h: Z890 #define MOVE_CACHE_LOW 14 von 10 auf 14
sind vermutlich harmlos. Du hast bei den LOW_TICKS_PER_MOVE aber eine 0 zuviel??
Aber dazu mehr:
RF1000.h: Z884 #define MOVE_CACHE_SIZE 20 von 16 auf 20
Das mit dem freien Ram wird euch beim Compilieren im Arduino angezeigt. Das sagt aus, wieviel Ram übrig bleibt, falls während der Laufzeit zusätzliche Varialben usw. benötigt werden, die flüchtig sind.
Man muss also genügend Ram übrig lassen, der nicht von vornherein für irgendwas verplant ist, sodass zur Laufzeit immer genügend Ram bleibt.
Beim Compilieren erscheint diese oder eine ähnliche Meldung mit MOVE_CACHE_SIZE = 20 beim RF1000
Code: Alles auswählen
Der Sketch verwendet 230044 Bytes (90%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 7191 Bytes (87%) des dynamischen Speichers, 1001 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten.
Wichtig ist hier, wieviel Ram übrig bleibt.
"1001 Bytes für lokale Variablen verbleiben." Aber wieviel übrig bleiben muss, das weiß ich nicht. Und ich kann auch nicht genau sagen, was passiert, wenn nicht genügend Ram übrig bleibt. Irgendwas wird dann spinnen.
MOVE_CACHE_SIZE frisst pro Anzahl 122 Byte. (Zumindest in Version 1.38.33)
So kann der freie Ram beim RF1000 mit normalen MOVE_CACHE_SIZE = 16 aussehen:
Code: Alles auswählen
Der Sketch verwendet 230044 Bytes (90%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 6703 Bytes (81%) des dynamischen Speichers, 1489 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten.
Und wenn ich den Milling-Mode mit normalen MOVE_CACHE_SIZE = 16 ausschalte/spare, dann das:
Code: Alles auswählen
Der Sketch verwendet 206790 Bytes (81%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 6620 Bytes (80%) des dynamischen Speichers, 1572 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten.
Komplett auf Milling-Mode verzichten bringt also 83 Byte Ram.
Als RF2000, wegen 2 Extrudern etc. gibts mit Millingmode und MOVE_CACHE_SIZE = 16 diese Ausgabe:
Code: Alles auswählen
Der Sketch verwendet 241308 Bytes (95%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 6864 Bytes (83%) des dynamischen Speichers, 1328 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten.
1489 - 1328 = 161 Byte Ram, den der RF2000 mehr benötigt.
motion.cpp hat geschrieben:PrintLine PrintLine::lines[MOVE_CACHE_SIZE]; // Cache for print moves.
-> Ein Printline Objekt pro Element des MOVE_CACHE_SIZE.
Wie kann man rausfinden, wieviel Ram übrig bleibt?
1) Es gibt einen Schalter der heißt
DEBUG_FREE_MEMORY
Screenshot_4.png
2) Und es gibt einen GCode der heißt
M3200 P1
Punkt 1 verursacht, dass überall im Programmcode diese DEBUG_MEMORY Funktion eingebunden wird:
#define DEBUG_MEMORY Commands::checkFreeMemory();
Die sind quer in den Funktionen zerstreut. Aber ich kann nicht sagen, ob es genügend davon gibt, um alle Verbrauchs-Spitzen abzudecken.
Der Drucker läuft also und sucht durch Commands::checkFreeMemory(); ständig nach dem niedrigsten gesehenen Wert des freien Rams zur Laufzeit.
Mit M3200 P1 kann man sich diesen niedrigsten Wert ausgeben lassen.
Wieviel Sicherheitspuffer man auf diesen Wert draufrechnen muss, weiß ich auch nicht
Darum habe ich daran nichts gemacht, zumal alle Repetier-Drucker mit Wert MOVE_CACHE_SIZE=16 zu laufen scheinen.
Ich meine, ein größerer MOVE_CACHE_SIZE-Wert ist schon erstrebenswert. Doch mir war das zu heiß. Wenn ich was umprogrammiere will ich Fehler/Fehlermeldungen sehen die Code-Fehler sind.
Nach meinem Gefühl brauchen wir minimum 600..700 Byte freiem Ram oder noch einiges mehr. Ich hab auch mal mit DEBUG_MEMORY / DEBUG_FREE_MEMORY gespielt und dann stand da "lowest free ram: 900" und vermutlich war die Anzahl der übrigen Bytes in Arduino irgendwo bei 1300 bis 1500.
Wenn jemand mehr darüber weiß oder eine Ahnung hat, wie wir den Wert optimieren können, gerne
LG